You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/09/09 21:22:57 UTC

[09/10] ambari git commit: AMBARI-18126 - Refactor Configuration To Allow For Generation Of Documentation (jonathanhurley)

http://git-wip-us.apache.org/repos/asf/ambari/blob/5630b5e7/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index fae9378..9c27e57 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -22,6 +22,7 @@ import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Field;
 import java.security.cert.CertificateException;
 import java.security.interfaces.RSAPublicKey;
 import java.util.ArrayList;
@@ -34,11 +35,14 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import java.util.TreeSet;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.ambari.annotations.Experimental;
 import org.apache.ambari.annotations.ExperimentalFeature;
+import org.apache.ambari.annotations.Markdown;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.events.listeners.alerts.AlertReceivedListener;
@@ -79,697 +83,1564 @@ public class Configuration {
   @Inject
   private OsFamily osFamily;
 
-  public static final String CONFIG_FILE = "ambari.properties";
-  public static final String BOOTSTRAP_DIR = "bootstrap.dir";
+  /**
+   * The filename of the {@link Properties} file which contains all of the
+   * configurations for Ambari.
+   */
+  private static final String CONFIG_FILE = "ambari.properties";
+
+  /**
+   * PREFIX_DIR is shared in ambari-agent.ini and should only be called by unit
+   * tests. For all server-side processing, it should be retrieved from
+   * <code>HostImpl.getPrefix()</code>
+   */
+  public static final String PREFIX_DIR = "/var/lib/ambari-agent/data";
+
+  /**
+   * The minimum JDK version supported by Ambari.
+   */
+  public static final float JDK_MIN_VERSION = 1.7f;
+
+  /**
+   *
+   */
+  private static final String LDAP_SYNC_MEMBER_REPLACE_PATTERN_DEFAULT = "";
+
+  /**
+   *
+   */
+  private static final String LDAP_SYNC_MEMBER_FILTER_DEFAULT = "";
+
+  /**
+   *
+   */
+  public static final String SERVER_JDBC_PROPERTIES_PREFIX = "server.jdbc.properties.";
+
+  /**
+   *
+   */
+  public static final String SERVER_PERSISTENCE_PROPERTIES_PREFIX = "server.persistence.properties.";
+
+  /**
+   *
+   */
+  public static final String HOSTNAME_MACRO = "{hostname}";
+
+  /**
+   *
+   */
+  public static final String JDBC_UNIT_NAME = "ambari-server";
+
+  /**
+   *
+   */
+  public static final String JDBC_LOCAL_URL = "jdbc:postgresql://localhost/";
+
+  /**
+   *
+   */
+  public static final String DEFAULT_DERBY_SCHEMA = "ambari";
+
+  /**
+   *
+   */
+  public static final String JDBC_IN_MEMORY_URL = String.format(
+      "jdbc:derby:memory:myDB/%s;create=true", DEFAULT_DERBY_SCHEMA);
+
+  /**
+   *
+   */
+  public static final String JDBC_IN_MEMORY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
+
+  /**
+   *
+   */
+  public static final String JAVAX_SSL_TRUSTSTORE = "javax.net.ssl.trustStore";
+
+  /**
+   *
+   */
+  public static final String JAVAX_SSL_TRUSTSTORE_PASSWORD = "javax.net.ssl.trustStorePassword";
+
+  /**
+   *
+   */
+  public static final String JAVAX_SSL_TRUSTSTORE_TYPE = "javax.net.ssl.trustStoreType";
+
+  /**
+   *
+   */
+  public static final String GLOBAL_CONFIG_TAG = "global";
+
+  /**
+   *
+   */
+  public static final String MAPREDUCE2_LOG4J_CONFIG_TAG = "mapreduce2-log4j";
+
+  /**
+   *
+   */
+  public static final String RCA_ENABLED_PROPERTY = "rca_enabled";
+
+  /**
+   * Threadpool sizing based on the number of available processors multiplied by
+   * 2.
+   */
+  public static final int PROCESSOR_BASED_THREADPOOL_CORE_SIZE_DEFAULT = 2
+      * Runtime.getRuntime().availableProcessors();
+
+  /**
+   * Threadpool sizing based on the number of available processors multiplied by
+   * 4.
+   */
+  public static final int PROCESSOR_BASED_THREADPOOL_MAX_SIZE_DEFAULT = 4
+      * Runtime.getRuntime().availableProcessors();
+
+  /**
+   *
+   */
+  private static final Set<String> dbConnectorPropertyNames = new HashSet<String>(Arrays.asList(
+      "custom.mysql.jdbc.name", "custom.oracle.jdbc.name", "custom.postgres.jdbc.name",
+      "custom.mssql.jdbc.name", "custom.hsqldb.jdbc.name", "custom.sqlanywhere.jdbc.name"));
+
+
+  /**
+   *
+   */
+  public static final String MASTER_KEY_ENV_PROP = "AMBARI_SECURITY_MASTER_KEY";
+
+  /**
+   *
+   */
+  public static final String MASTER_KEY_FILENAME_DEFAULT = "master";
+
+  /**
+   *
+   */
+  public static final String MASTER_KEYSTORE_FILENAME_DEFAULT = "credentials.jceks";
+
+  /**
+   * The directory on the ambari-server file system used for storing
+   * ambari-agent bootstrap information.
+   */
+  public static final ConfigurationProperty<String> BOOTSTRAP_DIRECTORY = new ConfigurationProperty<>(
+      "bootstrap.dir", AmbariPath.getPath("/var/run/ambari-server/bootstrap"));
+
+  /**
+   * The directory on the ambari-server file system used for expanding Views and
+   * storing webapp work.
+   */
+  public static final ConfigurationProperty<String> VIEWS_DIRECTORY = new ConfigurationProperty<>(
+      "views.dir", AmbariPath.getPath("/var/lib/ambari-server/resources/views"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> VIEWS_VALIDATE = new ConfigurationProperty<>(
+      "views.validate", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> VIEWS_REMOVE_UNDEPLOYED = new ConfigurationProperty<>(
+      "views.remove.undeployed", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> WEBAPP_DIRECTORY = new ConfigurationProperty<>(
+      "webapp.dir", "web");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> BOOTSTRAP_SCRIPT = new ConfigurationProperty<>(
+      "bootstrap.script", AmbariPath.getPath("/usr/bin/ambari_bootstrap"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> BOOTSTRAP_SETUP_AGENT_SCRIPT = new ConfigurationProperty<>(
+      "bootstrap.setup_agent.script",
+      AmbariPath.getPath("/usr/lib/python2.6/site-packages/ambari_server/setupAgent.py"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> BOOTSTRAP_SETUP_AGENT_PASSWORD = new ConfigurationProperty<>(
+      "bootstrap.setup_agent.password", "password");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> BOOTSTRAP_MASTER_HOSTNAME = new ConfigurationProperty<>(
+      "bootstrap.master_host_name", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> RECOMMENDATIONS_ARTIFACTS_LIFETIME = new ConfigurationProperty<>(
+      "recommendations.artifacts.lifetime", "1w");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> RECOMMENDATIONS_DIR = new ConfigurationProperty<>(
+      "recommendations.dir", AmbariPath.getPath("/var/run/ambari-server/stack-recommendations"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> STACK_ADVISOR_SCRIPT = new ConfigurationProperty<>(
+      "stackadvisor.script",
+      AmbariPath.getPath("/var/lib/ambari-server/resources/scripts/stack_advisor.py"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> AMBARI_PYTHON_WRAP = new ConfigurationProperty<>(
+      "ambari.python.wrap", "ambari-python-wrap");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> API_AUTHENTICATED_USER = new ConfigurationProperty<>(
+      "api.authenticated.user", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> API_USE_SSL = new ConfigurationProperty<>(
+      "api.ssl", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> API_CSRF_PREVENTION = new ConfigurationProperty<>(
+      "api.csrfPrevention.enabled", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> API_GZIP_COMPRESSION_ENABLED = new ConfigurationProperty<>(
+      "api.gzip.compression.enabled", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> API_GZIP_MIN_COMPRESSION_SIZE = new ConfigurationProperty<>(
+      "api.gzip.compression.min.size", "10240");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> AGENT_API_GZIP_COMPRESSION_ENABLED = new ConfigurationProperty<>(
+      "agent.api.gzip.compression.enabled", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> AGENT_USE_SSL = new ConfigurationProperty<>(
+      "agent.ssl", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_AGENT_HOSTNAME_VALIDATE = new ConfigurationProperty<>(
+      "security.agent.hostname.validate", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_TWO_WAY_SSL = new ConfigurationProperty<>(
+      "security.server.two_way_ssl", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_TWO_WAY_SSL_PORT = new ConfigurationProperty<>(
+      "security.server.two_way_ssl.port", "8441");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_ONE_WAY_SSL_PORT = new ConfigurationProperty<>(
+      "security.server.one_way_ssl.port", "8440");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_KSTR_DIR = new ConfigurationProperty<>(
+      "security.server.keys_dir", ".");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_CRT_NAME = new ConfigurationProperty<>(
+      "security.server.cert_name", "ca.crt");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_CSR_NAME = new ConfigurationProperty<>(
+      "security.server.csr_name", "ca.csr");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_KEY_NAME = new ConfigurationProperty<>(
+      "security.server.key_name", "ca.key");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> KSTR_NAME = new ConfigurationProperty<>(
+      "security.server.keystore_name", "keystore.p12");
+
+  /**
+   * By default self-signed certificates are used and we can use keystore as
+   * truststore in PKCS12 format When CA signed certificates are used truststore
+   * should be created in JKS format (truststore.jks)
+   */
+  public static final ConfigurationProperty<String> KSTR_TYPE = new ConfigurationProperty<>(
+      "security.server.keystore_type", "PKCS12");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> TSTR_NAME = new ConfigurationProperty<>(
+      "security.server.truststore_name", "keystore.p12");
+
+  /**
+   * By default self-signed certificates are used and we can use keystore as
+   * truststore in PKCS12 format When CA signed certificates are used truststore
+   * should be created in JKS format (truststore.jks)
+   */
+  public static final ConfigurationProperty<String> TSTR_TYPE = new ConfigurationProperty<>(
+      "security.server.truststore_type", "PKCS12");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_CRT_PASS_FILE = new ConfigurationProperty<>(
+      "security.server.crt_pass_file", "pass.txt");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_CRT_PASS = new ConfigurationProperty<>(
+      "security.server.crt_pass", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_CRT_PASS_LEN = new ConfigurationProperty<>(
+      "security.server.crt_pass.len", "50");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> PASSPHRASE_ENV = new ConfigurationProperty<>(
+      "security.server.passphrase_env_var", "AMBARI_PASSPHRASE");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> PASSPHRASE = new ConfigurationProperty<>(
+      "security.server.passphrase", "AMBARI_PASSPHRASE");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_DISABLED_CIPHERS = new ConfigurationProperty<>(
+      "security.server.disabled.ciphers", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_DISABLED_PROTOCOLS = new ConfigurationProperty<>(
+      "security.server.disabled.protocols", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> RESOURCES_DIR = new ConfigurationProperty<>(
+      "resources.dir", AmbariPath.getPath("/var/lib/ambari-server/resources/"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> METADATA_DIR_PATH = new ConfigurationProperty<>(
+      "metadata.path", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> COMMON_SERVICES_DIR_PATH = new ConfigurationProperty<>(
+      "common.services.path", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> EXTENSIONS_DIR_PATH = new ConfigurationProperty<>(
+      "extensions.path", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> MPACKS_STAGING_DIR_PATH = new ConfigurationProperty<>(
+      "mpacks.staging.path", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_VERSION_FILE = new ConfigurationProperty<>(
+      "server.version.file", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_VERSION = new ConfigurationProperty<>(
+      "version", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JAVA_HOME = new ConfigurationProperty<>(
+      "java.home", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JDK_NAME = new ConfigurationProperty<>(
+      "jdk.name", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JCE_NAME = new ConfigurationProperty<>(
+      "jce.name", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_SECURITY = new ConfigurationProperty<>(
+      "client.security", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_PORT = new ConfigurationProperty<>(
+      "client.api.port", "8080");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_PORT = new ConfigurationProperty<>(
+      "client.api.ssl.port", "8443");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_KSTR_DIR_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.keys_dir", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_KSTR_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.keystore_name", "https.keystore.p12");
+
+  /**
+   * By default self-signed certificates are used and we can use keystore as
+   * truststore in PKCS12 format When CA signed certificates are used truststore
+   * should be created in JKS format (truststore.jks)
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_KSTR_TYPE = new ConfigurationProperty<>(
+      "client.api.ssl.keystore_type", "PKCS12");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_TSTR_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.truststore_name", "https.keystore.p12");
+
+  /**
+   * By default self-signed certificates are used and we can use keystore as
+   * truststore in PKCS12 format When CA signed certificates are used truststore
+   * should be created in JKS format (truststore.jks)
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_TSTR_TYPE = new ConfigurationProperty<>(
+      "client.api.ssl.truststore_type", "PKCS12");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_CRT_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.cert_name", "https.crt");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_CRT_PASS_FILE_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.cert_pass_file", "https.pass.txt");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_CRT_PASS = new ConfigurationProperty<>(
+      "client.api.ssl.crt_pass", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CLIENT_API_SSL_KEY_NAME = new ConfigurationProperty<>(
+      "client.api.ssl.key_name", "https.key");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> ENABLE_AUTO_AGENT_CACHE_UPDATE = new ConfigurationProperty<>(
+      "agent.auto.cache.update", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CHECK_REMOTE_MOUNTS = new ConfigurationProperty<>(
+      "agent.check.remote.mounts", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> CHECK_MOUNTS_TIMEOUT = new ConfigurationProperty<>(
+      "agent.check.mounts.timeout", "0");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_DB_NAME = new ConfigurationProperty<>(
+      "server.jdbc.database_name", "ambari");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> REQUEST_READ_TIMEOUT = new ConfigurationProperty<>(
+      "views.request.read.timeout.millis", "10000");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> REQUEST_CONNECT_TIMEOUT = new ConfigurationProperty<>(
+      "views.request.connect.timeout.millis", "5000");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> AMBARI_REQUEST_READ_TIMEOUT = new ConfigurationProperty<>(
+      "views.ambari.request.read.timeout.millis", "45000");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> AMBARI_REQUEST_CONNECT_TIMEOUT = new ConfigurationProperty<>(
+      "views.ambari.request.connect.timeout.millis", "30000");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_POSTGRES_SCHEMA_NAME = new ConfigurationProperty<>(
+      "server.jdbc.postgres.schema", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> OJDBC_JAR_NAME = new ConfigurationProperty<>(
+      "db.oracle.jdbc.name", "ojdbc6.jar");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> MYSQL_JAR_NAME = new ConfigurationProperty<>(
+      "db.mysql.jdbc.name", "mysql-connector-java.jar");
+
+  /**
+   * For development purposes only, should be changed to 'false'
+   */
+  public static final ConfigurationProperty<String> IS_LDAP_CONFIGURED = new ConfigurationProperty<>(
+      "ambari.ldap.isConfigured", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_USE_SSL = new ConfigurationProperty<>(
+      "authentication.ldap.useSSL", "false");
+
+  /**
+   * The default value is used for embedded purposes only.
+   */
+  public static final ConfigurationProperty<String> LDAP_PRIMARY_URL = new ConfigurationProperty<>(
+      "authentication.ldap.primaryUrl", "localhost:33389");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_SECONDARY_URL = new ConfigurationProperty<>(
+      "authentication.ldap.secondaryUrl", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_BASE_DN = new ConfigurationProperty<>(
+      "authentication.ldap.baseDn", "dc=ambari,dc=apache,dc=org");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_BIND_ANONYMOUSLY = new ConfigurationProperty<>(
+      "authentication.ldap.bindAnonymously", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_MANAGER_DN = new ConfigurationProperty<>(
+      "authentication.ldap.managerDn", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_MANAGER_PASSWORD = new ConfigurationProperty<>(
+      "authentication.ldap.managerPassword", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_DN_ATTRIBUTE = new ConfigurationProperty<>(
+      "authentication.ldap.dnAttribute", "dn");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_USERNAME_ATTRIBUTE = new ConfigurationProperty<>(
+      "authentication.ldap.usernameAttribute", "uid");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_USER_BASE = new ConfigurationProperty<>(
+      "authentication.ldap.userBase", "ou=people,dc=ambari,dc=apache,dc=org");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_USER_OBJECT_CLASS = new ConfigurationProperty<>(
+      "authentication.ldap.userObjectClass", "person");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_GROUP_BASE = new ConfigurationProperty<>(
+      "authentication.ldap.groupBase", "ou=groups,dc=ambari,dc=apache,dc=org");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_GROUP_OBJECT_CLASS = new ConfigurationProperty<>(
+      "authentication.ldap.groupObjectClass", "group");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_GROUP_NAMING_ATTR = new ConfigurationProperty<>(
+      "authentication.ldap.groupNamingAttr", "cn");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_GROUP_MEMEBERSHIP_ATTR = new ConfigurationProperty<>(
+      "authentication.ldap.groupMembershipAttr", "member");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_ADMIN_GROUP_MAPPING_RULES = new ConfigurationProperty<>(
+      "authorization.ldap.adminGroupMappingRules", "Ambari Administrators");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_ADMIN_GROUP_MAPPING_MEMBER_ATTR = new ConfigurationProperty<>(
+      "authorization.ldap.adminGroupMappingMemberAttr", "Ambari Administrators");
+
+  /**
+   * When authentication through LDAP is enabled then Ambari Server uses this
+   * filter to lookup the user in LDAP based on the provided ambari user name.
+   *
+   * If it is not set then
+   * {@code (&({usernameAttribute}={0})(objectClass={userObjectClass}))} is
+   * used.
+   */
+  public static final ConfigurationProperty<String> LDAP_USER_SEARCH_FILTER = new ConfigurationProperty<>(
+      "authentication.ldap.userSearchFilter",
+      "(&({usernameAttribute}={0})(objectClass={userObjectClass}))");
+
+  /**
+   * This configuration controls whether the use of alternate user search filter
+   * is enabled. If the default LDAP user search filter is not able to find the
+   * authenticating user in LDAP than Ambari can fall back an alternative user
+   * search filter if this functionality is enabled.
+   *
+   * If it is not set then the default
+   */
+  public static final ConfigurationProperty<String> LDAP_ALT_USER_SEARCH_ENABLED = new ConfigurationProperty<>(
+      "authentication.ldap.alternateUserSearchEnabled", "false");
+
+  /**
+   * When authentication through LDAP is enabled Ambari Server uses this filter
+   * by default to lookup the user in LDAP when the user provides beside user
+   * name additional information. There might be cases when
+   * {@link #LDAP_USER_SEARCH_FILTER} may match multiple users in LDAP. In such
+   * cases the user is prompted to provide additional info, e.g. the domain he
+   * or she wants ot log in upon login beside the username. This filter will be
+   * used by Ambari Server to lookup users in LDAP if the login name the user
+   * logs in contains additional information beside ambari user name.
+   * <p>
+   * Note: Currently the use of alternate user search filter is triggered only
+   * if the user login name is in the username@domain format (e.g.
+   * user1@x.y.com) which is the userPrincipalName format used in AD.
+   * </p>
+   */
+  public static final ConfigurationProperty<String> LDAP_ALT_USER_SEARCH_FILTER = new ConfigurationProperty<>(
+      "authentication.ldap.alternateUserSearchFilter",
+      "(&(userPrincipalName={0})(objectClass={userObjectClass}))");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_GROUP_SEARCH_FILTER = new ConfigurationProperty<>(
+      "authorization.ldap.groupSearchFilter", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_REFERRAL = new ConfigurationProperty<>(
+      "authentication.ldap.referral", "follow");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_PAGINATION_ENABLED = new ConfigurationProperty<>(
+      "authentication.ldap.pagination.enabled", "true");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_SYCN_USER_MEMBER_REPLACE_PATTERN = new ConfigurationProperty<>(
+      "authentication.ldap.sync.userMemberReplacePattern",
+      LDAP_SYNC_MEMBER_REPLACE_PATTERN_DEFAULT);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_SYCN_GROUP_MEMBER_REPLACE_PATTERN = new ConfigurationProperty<>(
+      "authentication.ldap.sync.groupMemberReplacePattern",
+      LDAP_SYNC_MEMBER_REPLACE_PATTERN_DEFAULT);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_SYCN_USER_MEMBER_FILTER = new ConfigurationProperty<>(
+      "authentication.ldap.sync.userMemberFilter",
+      LDAP_SYNC_MEMBER_FILTER_DEFAULT);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> LDAP_SYCN_GROUP_MEMBER_FILTER = new ConfigurationProperty<>(
+      "authentication.ldap.sync.groupMemberFilter",
+      LDAP_SYNC_MEMBER_FILTER_DEFAULT);
+
+
+  public static final ConfigurationProperty<Long> SERVER_EC_CACHE_SIZE = new ConfigurationProperty<>(
+      "server.ecCacheSize", 10000L);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> SERVER_HRC_STATUS_SUMMARY_CACHE_ENABLED = new ConfigurationProperty<>(
+      "server.hrcStatusSummary.cache.enabled", Boolean.TRUE);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Long> SERVER_HRC_STATUS_SUMMARY_CACHE_SIZE = new ConfigurationProperty<>(
+      "server.hrcStatusSummary.cache.size", 10000L);
+
+  /**
+   * The value is specified in {@link TimeUnit#MINUTES}.
+   */
+  public static final ConfigurationProperty<Long> SERVER_HRC_STATUS_SUMMARY_CACHE_EXPIRY_DURATION = new ConfigurationProperty<>(
+      "server.hrcStatusSummary.cache.expiryDuration", 30L);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> SERVER_STALE_CONFIG_CACHE_ENABLED = new ConfigurationProperty<>(
+      "server.cache.isStale.enabled", Boolean.TRUE);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_STALE_CONFIG_CACHE_EXPIRATION = new ConfigurationProperty<>(
+      "server.cache.isStale.expiration", 600);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_PERSISTENCE_TYPE = new ConfigurationProperty<>(
+      "server.persistence.type", "local");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_USER_NAME = new ConfigurationProperty<>(
+      "server.jdbc.user.name", "ambari");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_USER_PASSWD = new ConfigurationProperty<>(
+      "server.jdbc.user.passwd", "bigdata");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_DRIVER = new ConfigurationProperty<>(
+      "server.jdbc.driver", "org.postgresql.Driver");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_URL = new ConfigurationProperty<>(
+      "server.jdbc.url", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_HTTP_REQUEST_HEADER_SIZE = new ConfigurationProperty<>(
+      "server.http.request.header.size", 64 * 1024);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_HTTP_RESPONSE_HEADER_SIZE = new ConfigurationProperty<>(
+      "server.http.response.header.size", 64 * 1024);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> ROLLING_UPGRADE_SKIP_PACKAGES_PREFIXES = new ConfigurationProperty<>(
+      "rolling.upgrade.skip.packages.prefixes", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> STACK_UPGRADE_BYPASS_PRECHECKS = new ConfigurationProperty<>(
+      "stack.upgrade.bypass.prechecks", Boolean.FALSE);
+
+  /**
+   * If a host is shutdown or ambari-agent is stopped, then Ambari Server will still keep waiting til the task timesout,
+   * say 10-20 mins. If the host comes back online and ambari-agent is started, then need this retry property
+   * to be greater; ideally, it should be greater than 2 * command_timeout in order to retry at least
+   * 3 times in that amount of mins.
+   * Suggested value is 15-30 mins.
+   */
+  public static final ConfigurationProperty<Integer> STACK_UPGRADE_AUTO_RETRY_TIMEOUT_MINS = new ConfigurationProperty<>(
+      "stack.upgrade.auto.retry.timeout.mins", 0);
+
+  /**
+   * If the stack.upgrade.auto.retry.timeout.mins property is positive, then run RetryUpgradeActionService every x
+   * seconds.
+   */
+  public static final ConfigurationProperty<Integer> STACK_UPGRADE_AUTO_RETRY_CHECK_INTERVAL_SECS = new ConfigurationProperty<>(
+      "stack.upgrade.auto.retry.check.interval.secs", 20);
+
+  /**
+   * If auto-retry during stack upgrade is enabled, skip any tasks whose custom command name contains at least one
+   * of the strings in the following CSV property. Note that values have to be enclosed in quotes and separated by commas.
+   */
+  public static final ConfigurationProperty<String> STACK_UPGRADE_AUTO_RETRY_CUSTOM_COMMAND_NAMES_TO_IGNORE = new ConfigurationProperty<>(
+      "stack.upgrade.auto.retry.command.names.to.ignore",
+      "\"ComponentVersionCheckAction\",\"FinalizeUpgradeAction\"");
+
+  /**
+   * If auto-retry during stack upgrade is enabled, skip any tasks whose command details contains at least one
+   * of the strings in the following CSV property. Note that values have to be enclosed in quotes and separated by commas.
+   */
+  public static final ConfigurationProperty<String> STACK_UPGRADE_AUTO_RETRY_COMMAND_DETAILS_TO_IGNORE = new ConfigurationProperty<>(
+      "stack.upgrade.auto.retry.command.details.to.ignore", "\"Execute HDFS Finalize\"");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> JWT_AUTH_ENABLED = new ConfigurationProperty<>(
+      "authentication.jwt.enabled", Boolean.FALSE);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JWT_AUTH_PROVIDER_URL = new ConfigurationProperty<>(
+      "authentication.jwt.providerUrl", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JWT_PUBLIC = new ConfigurationProperty<>(
+      "authentication.jwt.publicKey", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JWT_AUDIENCES = new ConfigurationProperty<>(
+      "authentication.jwt.audiences", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JWT_COOKIE_NAME = new ConfigurationProperty<>(
+      "authentication.jwt.cookieName", "hadoop-jwt");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> JWT_ORIGINAL_URL_QUERY_PARAM = new ConfigurationProperty<>(
+      "authentication.jwt.originalUrlParamName", "originalUrl");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_CONNECTION_POOL = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool", ConnectionPoolType.INTERNAL.getName());
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_MIN_SIZE = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.min-size", 5);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_MAX_SIZE = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.max-size", 32);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_AQUISITION_SIZE = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.acquisition-size", 5);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_MAX_AGE = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.max-age", 0);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_MAX_IDLE_TIME = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.max-idle-time", 14400);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_MAX_IDLE_TIME_EXCESS = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.max-idle-time-excess", 0);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_IDLE_TEST_INTERVAL = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.idle-test-interval", 7200);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_ACQUISITION_RETRY_ATTEMPTS = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.acquisition-retry-attempts", 30);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> SERVER_JDBC_CONNECTION_POOL_ACQUISITION_RETRY_DELAY = new ConfigurationProperty<>(
+      "server.jdbc.connection-pool.acquisition-retry-delay", 1000);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> OPERATIONS_RETRY_ATTEMPTS = new ConfigurationProperty<>(
+      "server.operations.retry-attempts", 0);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_RCA_USER_NAME = new ConfigurationProperty<>(
+      "server.jdbc.rca.user.name", "mapred");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_RCA_USER_PASSWD = new ConfigurationProperty<>(
+      "server.jdbc.rca.user.passwd", "mapred");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_RCA_DRIVER = new ConfigurationProperty<>(
+      "server.jdbc.rca.driver", "org.postgresql.Driver");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_JDBC_RCA_URL = new ConfigurationProperty<>(
+      "server.jdbc.rca.url", "jdbc:postgresql://" + HOSTNAME_MACRO + "/ambarirca");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<JPATableGenerationStrategy> SERVER_JDBC_GENERATE_TABLES = new ConfigurationProperty<>(
+      "server.jdbc.generateTables", JPATableGenerationStrategy.NONE);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> OS_FAMILY = new ConfigurationProperty<>(
+      "server.os_family", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> OS_VERSION = new ConfigurationProperty<>(
+      "server.os_type", "");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SRVR_HOSTS_MAPPING = new ConfigurationProperty<>(
+      "server.hosts.mapping", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SSL_TRUSTSTORE_PATH = new ConfigurationProperty<>(
+      "ssl.trustStore.path", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SSL_TRUSTSTORE_PASSWORD = new ConfigurationProperty<>(
+      "ssl.trustStore.password", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SSL_TRUSTSTORE_TYPE = new ConfigurationProperty<>(
+      "ssl.trustStore.type", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> MASTER_KEY_LOCATION = new ConfigurationProperty<>(
+      "security.master.key.location", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> MASTER_KEYSTORE_LOCATION = new ConfigurationProperty<>(
+      "security.master.keystore.location", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Long> TEMPORARYSTORE_RETENTION_MINUTES = new ConfigurationProperty<>(
+      "security.temporary.keystore.retention.minutes", 90L);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> TEMPORARYSTORE_ACTIVELY_PURGE = new ConfigurationProperty<>(
+      "security.temporary.keystore.actibely.purge", Boolean.TRUE);
+
+  /**
+   * The URL to use when creating messages which should include the Ambari
+   * Server URL.
+   */
+  public static final ConfigurationProperty<String> AMBARI_DISPLAY_URL = new ConfigurationProperty<>(
+      "ambari.display.url", null);
+
+  /**
+   * Key for repo validation suffixes.
+   */
+  public static final ConfigurationProperty<String> REPO_SUFFIX_KEY_UBUNTU = new ConfigurationProperty<>(
+      "repo.validation.suffixes.ubuntu", "/dists/%s/Release");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> REPO_SUFFIX_KEY_DEFAULT = new ConfigurationProperty<>(
+      "repo.validation.suffixes.default", "/repodata/repomd.xml");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> EXECUTION_SCHEDULER_CLUSTERED = new ConfigurationProperty<>(
+      "server.execution.scheduler.isClustered", "false");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> EXECUTION_SCHEDULER_THREADS = new ConfigurationProperty<>(
+      "server.execution.scheduler.maxThreads", "5");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> EXECUTION_SCHEDULER_CONNECTIONS = new ConfigurationProperty<>(
+      "server.execution.scheduler.maxDbConnections", "5");
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Long> EXECUTION_SCHEDULER_MISFIRE_TOLERATION = new ConfigurationProperty<>(
+      "server.execution.scheduler.misfire.toleration.minutes", 480L);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> EXECUTION_SCHEDULER_START_DELAY = new ConfigurationProperty<>(
+      "server.execution.scheduler.start.delay.seconds", 120);
+
+  /**
+   * The time that the executions schduler will wait before checking for new
+   * commands to schedule. Measure in {@link TimeUnit#SECONDS}.
+   */
+  public static final ConfigurationProperty<Long> EXECUTION_SCHEDULER_WAIT = new ConfigurationProperty<>(
+      "server.execution.scheduler.wait", 1L);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> SERVER_TMP_DIR = new ConfigurationProperty<>(
+      "server.tmp.dir", AmbariPath.getPath("/var/lib/ambari-server/tmp"));
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> EXTERNAL_SCRIPT_TIMEOUT = new ConfigurationProperty<>(
+      "server.script.timeout", 5000);
+
+  public static final String DEF_ARCHIVE_EXTENSION;
+  public static final String DEF_ARCHIVE_CONTENT_TYPE;
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> KDC_PORT = new ConfigurationProperty<>(
+      "default.kdcserver.port", "88");
 
   /**
-   *  PREFIX_DIR is shared in ambari-agent.ini and should only be called by unit tests.
-   *  For all server-side processing, it should be retrieved from <code>HostImpl.getPrefix()</code>
+   *
    */
-  public static final String PREFIX_DIR = "/var/lib/ambari-agent/data";
+  public static final ConfigurationProperty<Integer> KDC_CONNECTION_CHECK_TIMEOUT = new ConfigurationProperty<>(
+      "kdcserver.connection.check.timeout", 10000);
 
-  public static final String BOOTSTRAP_DIR_DEFAULT = AmbariPath.getPath("/var/run/ambari-server/bootstrap");
-  public static final String VIEWS_DIR = "views.dir";
-  public static final String VIEWS_DIR_DEFAULT = AmbariPath.getPath("/var/lib/ambari-server/resources/views");
-  public static final String VIEWS_VALIDATE = "views.validate";
-  public static final String VIEWS_VALIDATE_DEFAULT = "false";
-  public static final String VIEWS_REMOVE_UNDEPLOYED = "views.remove.undeployed";
-  public static final String VIEWS_REMOVE_UNDEPLOYED_DEFAULT = "false";
-  public static final String WEBAPP_DIR = "webapp.dir";
-  public static final String BOOTSTRAP_SCRIPT = "bootstrap.script";
-  public static final String BOOTSTRAP_SCRIPT_DEFAULT = AmbariPath.getPath("/usr/bin/ambari_bootstrap");
-  public static final String BOOTSTRAP_SETUP_AGENT_SCRIPT = "bootstrap.setup_agent.script";
-  public static final String BOOTSTRAP_SETUP_AGENT_PASSWORD = "bootstrap.setup_agent.password";
-  public static final String BOOTSTRAP_MASTER_HOSTNAME = "bootstrap.master_host_name";
-  public static final String RECOMMENDATIONS_ARTIFACTS_LIFETIME = "recommendations.artifacts.lifetime";
-  public static final String RECOMMENDATIONS_ARTIFACTS_LIFETIME_DEFAULT = "1w";
-  public static final String RECOMMENDATIONS_DIR = "recommendations.dir";
-  public static final String RECOMMENDATIONS_DIR_DEFAULT = AmbariPath.getPath("/var/run/ambari-server/stack-recommendations");
-  public static final String STACK_ADVISOR_SCRIPT = "stackadvisor.script";
-  public static final String STACK_ADVISOR_SCRIPT_DEFAULT = AmbariPath.getPath("/var/lib/ambari-server/resources/scripts/stack_advisor.py");
-  public static final String AMBARI_PYTHON_WRAP_KEY = "ambari.python.wrap";
-  public static final String AMBARI_PYTHON_WRAP_DEFAULT = "ambari-python-wrap";
-  public static final String API_AUTHENTICATED_USER = "api.authenticated.user";
-  public static final String API_USE_SSL = "api.ssl";
-  public static final String API_CSRF_PREVENTION_KEY = "api.csrfPrevention.enabled";
-  public static final String API_GZIP_COMPRESSION_ENABLED_KEY = "api.gzip.compression.enabled";
-  public static final String API_GZIP_MIN_COMPRESSION_SIZE_KEY = "api.gzip.compression.min.size";
-  public static final String AGENT_API_GZIP_COMPRESSION_ENABLED_KEY = "agent.api.gzip.compression.enabled";
-  public static final String AGENT_USE_SSL = "agent.ssl";
-  public static final String SRVR_AGENT_HOSTNAME_VALIDATE_KEY = "security.agent.hostname.validate";
-  public static final String SRVR_TWO_WAY_SSL_KEY = "security.server.two_way_ssl";
-  public static final String SRVR_TWO_WAY_SSL_PORT_KEY = "security.server.two_way_ssl.port";
-  public static final String SRVR_ONE_WAY_SSL_PORT_KEY = "security.server.one_way_ssl.port";
-  public static final String SRVR_KSTR_DIR_KEY = "security.server.keys_dir";
-  public static final String SRVR_CRT_NAME_KEY = "security.server.cert_name";
-  public static final String SRVR_CSR_NAME_KEY = "security.server.csr_name";
-  public static final String SRVR_KEY_NAME_KEY = "security.server.key_name";
-  public static final String KSTR_NAME_KEY = "security.server.keystore_name";
-  public static final String KSTR_TYPE_KEY = "security.server.keystore_type";
-  public static final String TSTR_NAME_KEY = "security.server.truststore_name";
-  public static final String TSTR_TYPE_KEY = "security.server.truststore_type";
-  public static final String SRVR_CRT_PASS_FILE_KEY = "security.server.crt_pass_file";
-  public static final String SRVR_CRT_PASS_KEY = "security.server.crt_pass";
-  public static final String SRVR_CRT_PASS_LEN_KEY = "security.server.crt_pass.len";
-  public static final String PASSPHRASE_ENV_KEY = "security.server.passphrase_env_var";
-  public static final String PASSPHRASE_KEY = "security.server.passphrase";
-  public static final String SRVR_DISABLED_CIPHERS = "security.server.disabled.ciphers";
-  public static final String SRVR_DISABLED_PROTOCOLS = "security.server.disabled.protocols";
-  public static final String RESOURCES_DIR_KEY = "resources.dir";
-  public static final String METADATA_DIR_PATH = "metadata.path";
-  public static final String COMMON_SERVICES_DIR_PATH = "common.services.path";
-  public static final String EXTENSIONS_DIR_PATH = "extensions.path";
-  public static final String MPACKS_STAGING_DIR_PATH = "mpacks.staging.path";
-  public static final String SERVER_VERSION_FILE = "server.version.file";
-  public static final String SERVER_VERSION_KEY = "version";
-  public static final String JAVA_HOME_KEY = "java.home";
-  public static final String JDK_NAME_KEY = "jdk.name";
-  public static final String JCE_NAME_KEY = "jce.name";
-  public static final float  JDK_MIN_VERSION = 1.7f;
-  public static final String CLIENT_SECURITY_KEY = "client.security";
-  public static final String CLIENT_API_PORT_KEY = "client.api.port";
-  public static final String CLIENT_API_SSL_PORT_KEY = "client.api.ssl.port";
-  public static final String CLIENT_API_SSL_KSTR_DIR_NAME_KEY = "client.api.ssl.keys_dir";
-  public static final String CLIENT_API_SSL_KSTR_NAME_KEY = "client.api.ssl.keystore_name";
-  public static final String CLIENT_API_SSL_KSTR_TYPE_KEY = "client.api.ssl.keystore_type";
-  public static final String CLIENT_API_SSL_TSTR_NAME_KEY = "client.api.ssl.truststore_name";
-  public static final String CLIENT_API_SSL_TSTR_TYPE_KEY = "client.api.ssl.truststore_type";
-  public static final String CLIENT_API_SSL_CRT_NAME_KEY = "client.api.ssl.cert_name";
-  public static final String CLIENT_API_SSL_CRT_PASS_FILE_NAME_KEY = "client.api.ssl.cert_pass_file";
-  public static final String CLIENT_API_SSL_CRT_PASS_KEY = "client.api.ssl.crt_pass";
-  public static final String CLIENT_API_SSL_KEY_NAME_KEY = "client.api.ssl.key_name";
-  public static final String ENABLE_AUTO_AGENT_CACHE_UPDATE_KEY = "agent.auto.cache.update";
-  public static final String ENABLE_AUTO_AGENT_CACHE_UPDATE_DEFAULT = "true";
-  public static final String CHECK_REMOTE_MOUNTS_KEY = "agent.check.remote.mounts";
-  public static final String CHECK_REMOTE_MOUNTS_DEFAULT = "false";
-  public static final String CHECK_MOUNTS_TIMEOUT_KEY = "agent.check.mounts.timeout";
-  public static final String CHECK_MOUNTS_TIMEOUT_DEFAULT = "0";
-  public static final String SERVER_DB_NAME_KEY = "server.jdbc.database_name";
-  public static final String SERVER_DB_NAME_DEFAULT = "ambari";
-  public static final String REQUEST_READ_TIMEOUT = "views.request.read.timeout.millis";
-  public static final String REQUEST_READ_TIMEOUT_DEFAULT= "10000";
-  public static final String REQUEST_CONNECT_TIMEOUT = "views.request.connect.timeout.millis";
-  public static final String REQUEST_CONNECT_TIMEOUT_DEFAULT = "5000";
-  public static final String AMBARI_REQUEST_READ_TIMEOUT = "views.ambari.request.read.timeout.millis";
-  public static final String AMBARI_REQUEST_READ_TIMEOUT_DEFAULT= "45000";
-  public static final String AMBARI_REQUEST_CONNECT_TIMEOUT = "views.ambari.request.connect.timeout.millis";
-  public static final String AMBARI_REQUEST_CONNECT_TIMEOUT_DEFAULT = "30000";
-  public static final String SERVER_JDBC_POSTGRES_SCHEMA_NAME = "server.jdbc.postgres.schema";
-  public static final String OJDBC_JAR_NAME_KEY = "db.oracle.jdbc.name";
-  public static final String OJDBC_JAR_NAME_DEFAULT = "ojdbc6.jar";
-  public static final String MYSQL_JAR_NAME_KEY = "db.mysql.jdbc.name";
-  public static final String MYSQL_JAR_NAME_DEFAULT = "mysql-connector-java.jar";
-  public static final String IS_LDAP_CONFIGURED = "ambari.ldap.isConfigured";
-  public static final String LDAP_USE_SSL_KEY = "authentication.ldap.useSSL";
-  public static final String LDAP_PRIMARY_URL_KEY = "authentication.ldap.primaryUrl";
-  public static final String LDAP_SECONDARY_URL_KEY = "authentication.ldap.secondaryUrl";
-  public static final String LDAP_BASE_DN_KEY = "authentication.ldap.baseDn";
-  public static final String LDAP_BIND_ANONYMOUSLY_KEY = "authentication.ldap.bindAnonymously";
-  public static final String LDAP_MANAGER_DN_KEY = "authentication.ldap.managerDn";
-  public static final String LDAP_MANAGER_PASSWORD_KEY = "authentication.ldap.managerPassword";
-  public static final String LDAP_DN_ATTRIBUTE_KEY = "authentication.ldap.dnAttribute";
-  public static final String LDAP_USERNAME_ATTRIBUTE_KEY = "authentication.ldap.usernameAttribute";
-  public static final String LDAP_USER_BASE_KEY = "authentication.ldap.userBase";
-  public static final String LDAP_USER_OBJECT_CLASS_KEY = "authentication.ldap.userObjectClass";
-  public static final String LDAP_GROUP_BASE_KEY = "authentication.ldap.groupBase";
-  public static final String LDAP_GROUP_OBJECT_CLASS_KEY = "authentication.ldap.groupObjectClass";
-  public static final String LDAP_GROUP_NAMING_ATTR_KEY = "authentication.ldap.groupNamingAttr";
-  public static final String LDAP_GROUP_MEMEBERSHIP_ATTR_KEY = "authentication.ldap.groupMembershipAttr";
-  public static final String LDAP_ADMIN_GROUP_MAPPING_RULES_KEY = "authorization.ldap.adminGroupMappingRules";
-  public static final String LDAP_ADMIN_GROUP_MAPPING_MEMBER_ATTR_KEY = "authorization.ldap.adminGroupMappingMemberAttr";
-  /**
-   * When authentication through LDAP is enabled then Ambari Server uses this filter to lookup
-   * the user in LDAP based on the provided ambari user name.
-   *
-   * If it is not set then the default {@link #LDAP_USER_SEARCH_FILTER_DEFAULT} is used.
-   */
-  public static final String LDAP_USER_SEARCH_FILTER_KEY = "authentication.ldap.userSearchFilter";
-
-  /**
-   * This configuration controls whether the use of alternate user search filter is enabled.
+  /**
    *
-   * If it is not set then the default
    */
-  public static final String LDAP_ALT_USER_SEARCH_ENABLED_KEY = "authentication.ldap.alternateUserSearchEnabled";
+  public static final ConfigurationProperty<String> KERBEROSTAB_CACHE_DIR = new ConfigurationProperty<>(
+      "kerberos.keytab.cache.dir", AmbariPath.getPath("/var/lib/ambari-server/data/cache"));
 
   /**
-   * When authentication through LDAP is enabled there might be cases when {@link #LDAP_USER_SEARCH_FILTER_KEY}
-   * may match multiple users in LDAP. In such cases the user is prompted to provide additional info, e.g. the domain
-   * he or she wants ot log in upon login beside the username. This filter will be used by Ambari Server to lookup
-   * users in LDAP if the login name the user logs in contains additional information beside ambari user name.
    *
-   * If it is not not set then the default {@link #LDAP_ALT_USER_SEARCH_FILTER_DEFAULT} is used.
+   */
+  public static final ConfigurationProperty<Boolean> KERBEROS_CHECK_JAAS_CONFIGURATION = new ConfigurationProperty<>(
+      "kerberos.check.jaas.configuration", Boolean.FALSE);
+
+  /**
    *
-   * <p>
-   *   Note: Currently this filter will only be used by Ambari Server if the user login name
-   *   is in the username@domain format (e.g. user1@x.y.com) which is the userPrincipalName
-   *   format used in AD.
-   * </p>
    */
-  public static final String LDAP_ALT_USER_SEARCH_FILTER_KEY = "authentication.ldap.alternateUserSearchFilter"; //TODO: we'll need a more generic solution to support any login name format
-
-  public static final String LDAP_GROUP_SEARCH_FILTER_KEY = "authorization.ldap.groupSearchFilter";
-  public static final String LDAP_REFERRAL_KEY = "authentication.ldap.referral";
-  public static final String LDAP_PAGINATION_ENABLED_KEY = "authentication.ldap.pagination.enabled";
-  public static final String LDAP_SYCN_USER_MEMBER_REPLACE_PATTERN = "authentication.ldap.sync.userMemberReplacePattern";
-  public static final String LDAP_SYCN_GROUP_MEMBER_REPLACE_PATTERN = "authentication.ldap.sync.groupMemberReplacePattern";
-  public static final String LDAP_SYCN_USER_MEMBER_FILTER = "authentication.ldap.sync.userMemberFilter";
-  public static final String LDAP_SYCN_GROUP_MEMBER_FILTER = "authentication.ldap.sync.groupMemberFilter";
-  public static final String SERVER_EC_CACHE_SIZE = "server.ecCacheSize";
-  public static final String SERVER_HRC_STATUS_SUMMARY_CACHE_ENABLED = "server.hrcStatusSummary.cache.enabled";
-  public static final String SERVER_HRC_STATUS_SUMMARY_CACHE_SIZE = "server.hrcStatusSummary.cache.size";
-  public static final String SERVER_HRC_STATUS_SUMMARY_CACHE_EXPIRY_DURATION = "server.hrcStatusSummary.cache.expiryDuration";
-  public static final String SERVER_STALE_CONFIG_CACHE_ENABLED_KEY = "server.cache.isStale.enabled";
-  public static final String SERVER_STALE_CONFIG_CACHE_EXPIRATION_KEY = "server.cache.isStale.expiration";
-  public static final String SERVER_PERSISTENCE_TYPE_KEY = "server.persistence.type";
-  public static final String SERVER_JDBC_USER_NAME_KEY = "server.jdbc.user.name";
-  public static final String SERVER_JDBC_USER_PASSWD_KEY = "server.jdbc.user.passwd";
-  public static final String SERVER_JDBC_DRIVER_KEY = "server.jdbc.driver";
-  public static final String SERVER_JDBC_URL_KEY = "server.jdbc.url";
-  public static final String SERVER_JDBC_PROPERTIES_PREFIX = "server.jdbc.properties.";
-  public static final String SERVER_PERSISTENCE_PROPERTIES_PREFIX = "server.persistence.properties.";
+  public static final ConfigurationProperty<String> RECOVERY_TYPE = new ConfigurationProperty<>(
+      "recovery.type", null);
+
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> RECOVERY_LIFETIME_MAX_COUNT = new ConfigurationProperty<>(
+      "recovery.lifetime_max_count", null);
+
+  public static final ConfigurationProperty<String> RECOVERY_MAX_COUNT = new ConfigurationProperty<>(
+      "recovery.max_count", null);
 
-  public static final String SERVER_HTTP_REQUEST_HEADER_SIZE = "server.http.request.header.size";
-  public static final String SERVER_HTTP_RESPONSE_HEADER_SIZE = "server.http.response.header.size";
-  public static final int SERVER_HTTP_REQUEST_HEADER_SIZE_DEFAULT = 64*1024;
-  public static final int SERVER_HTTP_RESPONSE_HEADER_SIZE_DEFAULT = 64*1024;
+  public static final ConfigurationProperty<String> RECOVERY_WINDOW_IN_MIN = new ConfigurationProperty<>(
+      "recovery.window_in_minutes", null);
 
-  // Properties for stack upgrade (Rolling, Express)
-  public static final String ROLLING_UPGRADE_SKIP_PACKAGES_PREFIXES_KEY = "rolling.upgrade.skip.packages.prefixes";
-  public static final String ROLLING_UPGRADE_SKIP_PACKAGES_PREFIXES_DEFAULT = "";
+  public static final ConfigurationProperty<String> RECOVERY_RETRY_GAP = new ConfigurationProperty<>(
+      "recovery.retry_interval", null);
 
-  public static final String STACK_UPGRADE_BYPASS_PRECHECKS_KEY = "stack.upgrade.bypass.prechecks";
-  public static final String STACK_UPGRADE_BYPASS_PRECHECKS_DEFAULT = "false";
+  public static final ConfigurationProperty<String> RECOVERY_DISABLED_COMPONENTS = new ConfigurationProperty<>(
+      "recovery.disabled_components", null);
+
+  public static final ConfigurationProperty<String> RECOVERY_ENABLED_COMPONENTS = new ConfigurationProperty<>(
+      "recovery.enabled_components", null);
 
   /**
-   * If a host is shutdown or ambari-agent is stopped, then Ambari Server will still keep waiting til the task timesout,
-   * say 10-20 mins. If the host comes back online and ambari-agent is started, then need this retry property
-   * to be greater; ideally, it should be greater than 2 * command_timeout in order to retry at least
-   * 3 times in that amount of mins.
-   * Suggested value is 15-30 mins.
+   * Allow proxy calls to these hosts and ports only
    */
-  public static final String STACK_UPGRADE_AUTO_RETRY_TIMEOUT_MINS_KEY = "stack.upgrade.auto.retry.timeout.mins";
-  public static final String STACK_UPGRADE_AUTO_RETRY_TIMEOUT_MINS_DEFAULT = "0";
+  public static final ConfigurationProperty<String> PROXY_ALLOWED_HOST_PORTS = new ConfigurationProperty<>(
+      "proxy.allowed.hostports", "*:*");
 
   /**
-   * If the stack.upgrade.auto.retry.timeout.mins property is positive, then run RetryUpgradeActionService every x
-   * seconds.
+   * This key defines whether stages of parallel requests are executed in
+   * parallel or sequentally. Only stages from different requests
+   * running on not interfering host sets may be executed in parallel.
    */
-  public static final String STACK_UPGRADE_AUTO_RETRY_CHECK_INTERVAL_SECS_KEY = "stack.upgrade.auto.retry.check.interval.secs";
-  public static final String STACK_UPGRADE_AUTO_RETRY_CHECK_INTERVAL_SECS_DEFAULT = "20";
+  public static final ConfigurationProperty<Boolean> PARALLEL_STAGE_EXECUTION = new ConfigurationProperty<>(
+      "server.stages.parallel", Boolean.TRUE);
 
   /**
-   * If auto-retry during stack upgrade is enabled, skip any tasks whose custom command name contains at least one
-   * of the strings in the following CSV property. Note that values have to be enclosed in quotes and separated by commas.
+   *
    */
-  public static final String STACK_UPGRADE_AUTO_RETRY_CUSTOM_COMMAND_NAMES_TO_IGNORE_KEY = "stack.upgrade.auto.retry.command.names.to.ignore";
-  public static final String STACK_UPGRADE_AUTO_RETRY_CUSTOM_COMMAND_NAMES_TO_IGNORE_DEFAULT = "\"ComponentVersionCheckAction\",\"FinalizeUpgradeAction\"";
+  public static final ConfigurationProperty<Long> AGENT_TASK_TIMEOUT = new ConfigurationProperty<>(
+      "agent.task.timeout", 900L);
 
   /**
-   * If auto-retry during stack upgrade is enabled, skip any tasks whose command details contains at least one
-   * of the strings in the following CSV property. Note that values have to be enclosed in quotes and separated by commas.
+   *
    */
-  public static final String STACK_UPGRADE_AUTO_RETRY_COMMAND_DETAILS_TO_IGNORE_KEY = "stack.upgrade.auto.retry.command.details.to.ignore";
-  public static final String STACK_UPGRADE_AUTO_RETRY_COMMAND_DETAILS_TO_IGNORE_DEFAULT = "\"Execute HDFS Finalize\"";
-
-  public static final String JWT_AUTH_ENBABLED = "authentication.jwt.enabled";
-  public static final String JWT_AUTH_PROVIDER_URL = "authentication.jwt.providerUrl";
-  public static final String JWT_PUBLIC_KEY = "authentication.jwt.publicKey";
-  public static final String JWT_AUDIENCES = "authentication.jwt.audiences";
-  public static final String JWT_COOKIE_NAME = "authentication.jwt.cookieName";
-  public static final String JWT_ORIGINAL_URL_QUERY_PARAM = "authentication.jwt.originalUrlParamName";
-  public static final String JWT_COOKIE_NAME_DEFAULT = "hadoop-jwt";
-  public static final String JWT_ORIGINAL_URL_QUERY_PARAM_DEFAULT = "originalUrl";
-
-  public static final String SERVER_JDBC_CONNECTION_POOL = "server.jdbc.connection-pool";
-  public static final String SERVER_JDBC_CONNECTION_POOL_MIN_SIZE = "server.jdbc.connection-pool.min-size";
-  public static final String SERVER_JDBC_CONNECTION_POOL_MAX_SIZE = "server.jdbc.connection-pool.max-size";
-  public static final String SERVER_JDBC_CONNECTION_POOL_AQUISITION_SIZE = "server.jdbc.connection-pool.acquisition-size";
-  public static final String SERVER_JDBC_CONNECTION_POOL_MAX_AGE = "server.jdbc.connection-pool.max-age";
-  public static final String SERVER_JDBC_CONNECTION_POOL_MAX_IDLE_TIME = "server.jdbc.connection-pool.max-idle-time";
-  public static final String SERVER_JDBC_CONNECTION_POOL_MAX_IDLE_TIME_EXCESS = "server.jdbc.connection-pool.max-idle-time-excess";
-  public static final String SERVER_JDBC_CONNECTION_POOL_IDLE_TEST_INTERVAL = "server.jdbc.connection-pool.idle-test-interval";
-  public static final String SERVER_JDBC_CONNECTION_POOL_ACQUISITION_RETRY_ATTEMPTS = "server.jdbc.connection-pool.acquisition-retry-attempts";
-  public static final String SERVER_JDBC_CONNECTION_POOL_ACQUISITION_RETRY_DELAY = "server.jdbc.connection-pool.acquisition-retry-delay";
-
-  public static final String OPERATIONS_RETRY_ATTEMPTS_KEY = "server.operations.retry-attempts";
-  public static final String OPERATIONS_RETRY_ATTEMPTS_DEFAULT = "0";
-  public static final int RETRY_ATTEMPTS_LIMIT = 10;
-
-  public static final String AMBARI_SERVER_USER = "ambari-server.user";
-
-  public static final String SERVER_JDBC_RCA_USER_NAME_KEY = "server.jdbc.rca.user.name";
-  public static final String SERVER_JDBC_RCA_USER_PASSWD_KEY = "server.jdbc.rca.user.passwd";
-  public static final String SERVER_JDBC_RCA_DRIVER_KEY = "server.jdbc.rca.driver";
-  public static final String SERVER_JDBC_RCA_URL_KEY = "server.jdbc.rca.url";
-  public static final String SERVER_JDBC_GENERATE_TABLES_KEY = "server.jdbc.generateTables";
-  public static final String JDBC_UNIT_NAME = "ambari-server";
-  public static final String JDBC_LOCAL_URL = "jdbc:postgresql://localhost/";
-  public static final String JDBC_LOCAL_DRIVER = "org.postgresql.Driver";
-  public static final String DEFAULT_DERBY_SCHEMA = "ambari";
-  public static final String JDBC_IN_MEMORY_URL = String.format("jdbc:derby:memory:myDB/%s;create=true", DEFAULT_DERBY_SCHEMA);
-  public static final String JDBC_IN_MEMROY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
-  public static final String HOSTNAME_MACRO = "{hostname}";
-  public static final String JDBC_RCA_LOCAL_URL = "jdbc:postgresql://" + HOSTNAME_MACRO + "/ambarirca";
-  public static final String JDBC_RCA_LOCAL_DRIVER = "org.postgresql.Driver";
-  public static final String OS_FAMILY_KEY = "server.os_family";
-  public static final String OS_VERSION_KEY = "server.os_type";
-  public static final String SRVR_HOSTS_MAPPING = "server.hosts.mapping";
-  // Command parameter names
-  public static final String UPGRADE_FROM_STACK = "source_stack_version";
-  public static final String UPGRADE_TO_STACK = "target_stack_version";
-  public static final String SSL_TRUSTSTORE_PATH_KEY = "ssl.trustStore.path";
-  public static final String SSL_TRUSTSTORE_PASSWORD_KEY = "ssl.trustStore.password";
-  public static final String SSL_TRUSTSTORE_TYPE_KEY = "ssl.trustStore.type";
-  public static final String JAVAX_SSL_TRUSTSTORE = "javax.net.ssl.trustStore";
-  public static final String JAVAX_SSL_TRUSTSTORE_PASSWORD = "javax.net.ssl.trustStorePassword";
-  public static final String JAVAX_SSL_TRUSTSTORE_TYPE = "javax.net.ssl.trustStoreType";
-  public static final String SRVR_TWO_WAY_SSL_PORT_DEFAULT = "8441";
-  public static final String SRVR_ONE_WAY_SSL_PORT_DEFAULT = "8440";
-  public static final String SRVR_CRT_NAME_DEFAULT = "ca.crt";
-  public static final String SRVR_KEY_NAME_DEFAULT = "ca.key";
-  public static final String SRVR_CSR_NAME_DEFAULT = "ca.csr";
-  public static final String KSTR_NAME_DEFAULT = "keystore.p12";
-  public static final String KSTR_TYPE_DEFAULT = "PKCS12";
-  // By default self-signed certificates are used and we can use keystore as truststore in PKCS12 format
-  // When CA signed certificates are used truststore should be created in JKS format (truststore.jks)
-  public static final String TSTR_NAME_DEFAULT = "keystore.p12";
-  public static final String TSTR_TYPE_DEFAULT = "PKCS12";
-  public static final String CLIENT_API_SSL_KSTR_NAME_DEFAULT = "https.keystore.p12";
-  public static final String CLIENT_API_SSL_KSTR_TYPE_DEFAULT = "PKCS12";
-  // By default self-signed certificates are used and we can use keystore as truststore in PKCS12 format
-  // When CA signed certificates are used truststore should be created in JKS format (truststore.jks)
-  public static final String CLIENT_API_SSL_TSTR_NAME_DEFAULT = "https.keystore.p12";
-  public static final String CLIENT_API_SSL_TSTR_TYPE_DEFAULT = "PKCS12";
-  public static final String CLIENT_API_SSL_CRT_PASS_FILE_NAME_DEFAULT = "https.pass.txt";
-  public static final String CLIENT_API_SSL_KEY_NAME_DEFAULT = "https.key";
-  public static final String CLIENT_API_SSL_CRT_NAME_DEFAULT = "https.crt";
-  public static final String GLOBAL_CONFIG_TAG = "global";
-  public static final String MAPREDUCE2_LOG4J_CONFIG_TAG = "mapreduce2-log4j";
-  public static final String RCA_ENABLED_PROPERTY = "rca_enabled";
-  public static final String HIVE_CONFIG_TAG = "hive-site";
-  public static final String HIVE_METASTORE_PASSWORD_PROPERTY = "javax.jdo.option.ConnectionPassword";
-  public static final String MASTER_KEY_PERSISTED = "security.master.key.ispersisted";
-  public static final String MASTER_KEY_LOCATION = "security.master.key.location";
-  public static final String MASTER_KEYSTORE_LOCATION = "security.master.keystore.location";
-  public static final String MASTER_KEY_ENV_PROP = "AMBARI_SECURITY_MASTER_KEY";
-  public static final String MASTER_KEY_FILENAME_DEFAULT = "master";
-  public static final String MASTER_KEYSTORE_FILENAME_DEFAULT = "credentials.jceks";
-  public static final String TEMPORARY_KEYSTORE_RETENTION_MINUTES = "security.temporary.keystore.retention.minutes";
-  public static final long TEMPORARY_KEYSTORE_RETENTION_MINUTES_DEFAULT = 90;
-  public static final String TEMPORARY_KEYSTORE_ACTIVELY_PURGE = "security.temporary.keystore.actibely.purge";
-  public static final boolean TEMPORARY_KEYSTORE_ACTIVELY_PURGE_DEFAULT = true;
-
-  // Alerts notifications properties
-  public static final String AMBARI_DISPLAY_URL = "ambari.display.url";
+  public static final ConfigurationProperty<Long> AGENT_PACKAGE_INSTALL_TASK_TIMEOUT = new ConfigurationProperty<>(
+      "agent.package.install.task.timeout", 1800L);
 
   /**
-   * Key for repo validation suffixes.
+   * Max number of tasks that may be executed within a single stage.
+   * This limitation is used for tasks that when executed in a 1000+ node cluster,
+   * may DDOS servers providing downloadable resources
    */
-  public static final String REPO_SUFFIX_KEY_UBUNTU = "repo.validation.suffixes.ubuntu";
-  public static final String REPO_SUFFIX_KEY_DEFAULT = "repo.validation.suffixes.default";
-
-  public static final String EXECUTION_SCHEDULER_CLUSTERED_KEY = "server.execution.scheduler.isClustered";
-  public static final String EXECUTION_SCHEDULER_THREADS_KEY = "server.execution.scheduler.maxThreads";
-  public static final String EXECUTION_SCHEDULER_CONNECTIONS_KEY = "server.execution.scheduler.maxDbConnections";
-  public static final String EXECUTION_SCHEDULER_MISFIRE_TOLERATION_KEY = "server.execution.scheduler.misfire.toleration.minutes";
-  public static final String EXECUTION_SCHEDULER_START_DELAY_KEY = "server.execution.scheduler.start.delay.seconds";
-  public static final String EXECUTION_SCHEDULER_WAIT_KEY = "server.execution.scheduler.wait";
-  public static final String DEFAULT_SCHEDULER_THREAD_COUNT = "5";
-  public static final String DEFAULT_SCHEDULER_MAX_CONNECTIONS = "5";
-  public static final String DEFAULT_EXECUTION_SCHEDULER_MISFIRE_TOLERATION = "480";
-  public static final String DEFAULT_SCHEDULER_START_DELAY_SECONDS = "120";
-  public static final String DEFAULT_EXECUTION_SCHEDULER_WAIT_SECONDS = "1";
-  public static final String SERVER_TMP_DIR_KEY = "server.tmp.dir";
-  public static final String SERVER_TMP_DIR_DEFAULT = AmbariPath.getPath("/var/lib/ambari-server/tmp");
-  public static final String EXTERNAL_SCRIPT_TIMEOUT_KEY = "server.script.timeout";
-  public static final String EXTERNAL_SCRIPT_TIMEOUT_DEFAULT = "5000";
-  public static final String DEF_ARCHIVE_EXTENSION;
-  public static final String DEF_ARCHIVE_CONTENT_TYPE;
+  public static final ConfigurationProperty<Integer> AGENT_PACKAGE_PARALLEL_COMMANDS_LIMIT = new ConfigurationProperty<>(
+      "agent.package.parallel.commands.limit", 100);
 
   /**
-   * Kerberos related configuration options
+   * Server side task (default) timeout value
    */
-  public static final String KDC_PORT_KEY = "default.kdcserver.port";
-  public static final String KDC_PORT_KEY_DEFAULT = "88";
-  public static final String KDC_CONNECTION_CHECK_TIMEOUT_KEY = "kdcserver.connection.check.timeout";
-  public static final String KDC_CONNECTION_CHECK_TIMEOUT_DEFAULT = "10000";
-  public static final String KERBEROS_KEYTAB_CACHE_DIR_KEY = "kerberos.keytab.cache.dir";
-  public static final String KERBEROS_KEYTAB_CACHE_DIR_DEFAULT = AmbariPath.getPath("/var/lib/ambari-server/data/cache");
-  public static final String KERBEROS_CHECK_JAAS_CONFIGURATION_KEY = "kerberos.check.jaas.configuration";
-  public static final String KERBEROS_CHECK_JAAS_CONFIGURATION_DEFAULT = "false";
+  public static final ConfigurationProperty<Integer> SERVER_TASK_TIMEOUT = new ConfigurationProperty<>(
+      "server.task.timeout", 1200);
 
   /**
-   * Recovery related configuration
+   *
    */
-  public static final String RECOVERY_TYPE_KEY = "recovery.type";
-  public static final String RECOVERY_LIFETIME_MAX_COUNT_KEY = "recovery.lifetime_max_count";
-  public static final String RECOVERY_MAX_COUNT_KEY = "recovery.max_count";
-  public static final String RECOVERY_WINDOW_IN_MIN_KEY = "recovery.window_in_minutes";
-  public static final String RECOVERY_RETRY_GAP_KEY = "recovery.retry_interval";
-  public static final String RECOVERY_DISABLED_COMPONENTS_KEY = "recovery.disabled_components";
-  public static final String RECOVERY_ENABLED_COMPONENTS_KEY = "recovery.enabled_components";
+  public static final ConfigurationProperty<String> CUSTOM_ACTION_DEFINITION = new ConfigurationProperty<>(
+      "custom.action.definitions",
+      AmbariPath.getPath("/var/lib/ambari-server/resources/custom_action_definitions"));
 
   /**
-   * Allow proxy calls to these hosts and ports only
+   *
    */
-  public static final String PROXY_ALLOWED_HOST_PORTS = "proxy.allowed.hostports";
-  public static final String PROXY_ALLOWED_HOST_PORTS_DEFAULT = "*:*";
+  public static final ConfigurationProperty<String> SHARED_RESOURCES_DIR = new ConfigurationProperty<>(
+      "shared.resources.dir",
+      AmbariPath.getPath("/usr/lib/ambari-server/lib/ambari_commons/resources"));
 
   /**
-   * This key defines whether stages of parallel requests are executed in
-   * parallel or sequentally. Only stages from different requests
-   * running on not interfering host sets may be executed in parallel.
+   *
    */
-  public static final String PARALLEL_STAGE_EXECUTION_KEY = "server.stages.parallel";
-  public static final String AGENT_TASK_TIMEOUT_KEY = "agent.task.timeout";
-  public static final String AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_KEY = "agent.package.install.task.timeout";
+  public static final ConfigurationProperty<String> ANONYMOUS_AUDIT_NAME = new ConfigurationProperty<>(
+      "anonymous.audit.name", "_anonymous");
 
   /**
-   * Max number of tasks that may be executed within a single stage.
-   * This limitation is used for tasks that when executed in a 1000+ node cluster,
-   * may DDOS servers providing downloadable resources
+   * Indicator for sys prepped host
+   * It is possible the some nodes are sys prepped and some are not. This can be enabled later
+   * by agent over-writing global indicator from ambari-server
    */
-  public static final String AGENT_PACKAGE_PARALLEL_COMMANDS_LIMIT_KEY = "agent.package.parallel.commands.limit";
-  public static final String AGENT_PACKAGE_PARALLEL_COMMANDS_LIMIT_DEFAULT = "100";
+  public static final ConfigurationProperty<String> SYS_PREPPED_HOSTS = new ConfigurationProperty<>(
+      "packages.pre.installed", "false");
 
-  public static final String AGENT_TASK_TIMEOUT_DEFAULT = "900";
-  public static final String AGENT_PACKAGE_INSTALL_TASK_TIMEOUT_DEFAULT = "1800";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> BLUEPRINT_SKIP_INSTALL_TASKS = new ConfigurationProperty<>(
+      "blueprint.skip_install_tasks", Boolean.FALSE);
 
   /**
-   * Server side task (default) timeout value
+   *
    */
-  public static final String SERVER_TASK_TIMEOUT_KEY = "server.task.timeout";
-  public static final String SERVER_TASK_TIMEOUT_DEFAULT = "1200";
-
-  public static final String CUSTOM_ACTION_DEFINITION_KEY = "custom.action.definitions";
-  public static final String SHARED_RESOURCES_DIR_KEY = "shared.resources.dir";
-
-  protected static final boolean SERVER_HRC_STATUS_SUMMARY_CACHE_ENABLED_DEFAULT = true;
-  protected static final long SERVER_HRC_STATUS_SUMMARY_CACHE_SIZE_DEFAULT = 10000L;
-  protected static final long SERVER_HRC_STATUS_SUMMARY_CACHE_EXPIRY_DURATION_DEFAULT = 30; //minutes
-
-  private static final String CUSTOM_ACTION_DEFINITION_DEF_VALUE = AmbariPath.getPath("/var/lib/ambari-server/resources/custom_action_definitions");
-
-  private static final long SERVER_EC_CACHE_SIZE_DEFAULT = 10000L;
-  private static final String SERVER_STALE_CONFIG_CACHE_ENABLED_DEFAULT = "true";
-  private static final String SERVER_STALE_CONFIG_CACHE_EXPIRATION_DEFAULT = "600";
-  private static final String SERVER_JDBC_USER_NAME_DEFAULT = "ambari";
-  private static final String SERVER_JDBC_USER_PASSWD_DEFAULT = "bigdata";
-  private static final String SERVER_JDBC_RCA_USER_NAME_DEFAULT = "mapred";
-  private static final String SERVER_JDBC_RCA_USER_PASSWD_DEFAULT = "mapred";
-  private static final String SRVR_AGENT_HOSTNAME_VALIDATE_DEFAULT = "true";
-  private static final String SRVR_TWO_WAY_SSL_DEFAULT = "false";
-  private static final String SRVR_KSTR_DIR_DEFAULT = ".";
-  private static final String API_CSRF_PREVENTION_DEFAULT = "true";
-  private static final String API_GZIP_COMPRESSION_ENABLED_DEFAULT = "true";
-  private static final String API_GZIP_MIN_COMPRESSION_SIZE_DEFAULT = "10240";
-  private static final String SRVR_CRT_PASS_FILE_DEFAULT = "pass.txt";
-  private static final String SRVR_CRT_PASS_LEN_DEFAULT = "50";
-  private static final String SRVR_DISABLED_CIPHERS_DEFAULT = "";
-  private static final String SRVR_DISABLED_PROTOCOLS_DEFAULT = "";
-  private static final String PASSPHRASE_ENV_DEFAULT = "AMBARI_PASSPHRASE";
-  private static final String RESOURCES_DIR_DEFAULT = AmbariPath.getPath("/var/lib/ambari-server/resources/");
-  private static final String SHARED_RESOURCES_DIR_DEFAULT = AmbariPath.getPath("/usr/lib/ambari-server/lib/ambari_commons/resources");
-  private static final String ANONYMOUS_AUDIT_NAME_KEY = "anonymous.audit.name";
-
-  private static final int CLIENT_API_PORT_DEFAULT = 8080;
-  private static final int CLIENT_API_SSL_PORT_DEFAULT = 8443;
-  private static final String LDAP_BIND_ANONYMOUSLY_DEFAULT = "true";
-  private static final String LDAP_PAGINATION_ENABLED_DEFAULT = "true";
+  private static final String LDAP_ADMIN_GROUP_MAPPING_MEMBER_ATTR_DEFAULT = "";
 
   /**
-   * Indicator for sys prepped host
-   * It is possible the some nodes are sys prepped and some are not. This can be enabled later
-   * by agent over-writing global indicator from ambari-server
+   *
    */
-  public static final String SYS_PREPPED_HOSTS_KEY = "packages.pre.installed";
-  public static final String SYS_PREPPED_HOSTS_DEFAULT = "false";
+  public static final ConfigurationProperty<Integer> SERVER_CONNECTION_MAX_IDLE_TIME = new ConfigurationProperty<>(
+      "server.connection.max.idle.millis", 900000);
 
-  public static final String BLUEPRINT_SKIP_INSTALL_TASKS_KEY = "blueprint.skip_install_tasks";
-  public static final String BLUEPRINT_SKIP_INSTALL_TASKS_DEFAULT = "false";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> CLIENT_THREADPOOL_SIZE = new ConfigurationProperty<>(
+      "client.threadpool.size.max", 25);
 
   /**
-   * !!! TODO: For embedded server only - should be removed later
+   *
    */
-  private static final String LDAP_PRIMARY_URL_DEFAULT = "localhost:33389";
-  private static final String LDAP_BASE_DN_DEFAULT = "dc=ambari,dc=apache,dc=org";
-  private static final String LDAP_USERNAME_ATTRIBUTE_DEFAULT = "uid";
-  private static final String LDAP_DN_ATTRIBUTE_DEFAULT = "dn";
-  private static final String LDAP_USER_BASE_DEFAULT = "ou=people,dc=ambari,dc=apache,dc=org";
-  private static final String LDAP_USER_OBJECT_CLASS_DEFAULT = "person";
-  private static final String LDAP_GROUP_BASE_DEFAULT = "ou=groups,dc=ambari,dc=apache,dc=org";
-  private static final String LDAP_GROUP_OBJECT_CLASS_DEFAULT = "group";
-  private static final String LDAP_GROUP_NAMING_ATTR_DEFAULT = "cn";
-  private static final String LDAP_GROUP_MEMBERSHIP_ATTR_DEFAULT = "member";
-  private static final String LDAP_ADMIN_GROUP_MAPPING_RULES_DEFAULT = "Ambari Administrators";
-  private static final String LDAP_ADMIN_GROUP_MAPPING_MEMBER_ATTR_DEFAULT = "";
+  public static final ConfigurationProperty<Integer> AGENT_THREADPOOL_SIZE = new ConfigurationProperty<>(
+      "agent.threadpool.size.max", 25);
+
   /**
-   * If the default LDAP user search filter is not able to find the authenticating user
-   * in LDAP than Ambari can fall back an alternative user search filter if this
-   * functionality is enabled. Whether this functionality is enabled or disabled
-   * can be controlled via {@link #LDAP_ALT_USER_SEARCH_ENABLED_KEY}.
    *
-   * If {@link #LDAP_ALT_USER_SEARCH_ENABLED_KEY} not provided in ambari properties
-   * than the functionality is disabled by default.
+   */
+  public static final ConfigurationProperty<Integer> VIEW_EXTRACTION_THREADPOOL_MAX_SIZE = new ConfigurationProperty<>(
+      "view.extraction.threadpool.size.max", 20);
+
+  /**
    *
    */
-  protected static final String LDAP_ALT_USER_SEARCH_ENABLED_DEFAULT = "false";
+  public static final ConfigurationProperty<Integer> VIEW_EXTRACTION_THREADPOOL_CORE_SIZE = new ConfigurationProperty<>(
+      "view.extraction.threadpool.size.core", 10);
 
   /**
-   * When authentication through LDAP is enabled then Ambari Server uses this filter by default to lookup
-   * the user in LDAP if one not provided in the config via {@link #LDAP_USER_SEARCH_FILTER_KEY}.
+   *
    */
-  protected static final String LDAP_USER_SEARCH_FILTER_DEFAULT = "(&({usernameAttribute}={0})(objectClass={userObjectClass}))";
+  public static final ConfigurationProperty<Long> VIEW_EXTRACTION_THREADPOOL_TIMEOUT = new ConfigurationProperty<>(
+      "view.extraction.threadpool.timeout", 100000L);
 
   /**
-   * When authentication through LDAP is enabled Ambari Server uses this filter by default to lookup
-   * the user in LDAP when the user provides beside user name additional information.
-   * This filter can be overridden through {@link #LDAP_ALT_USER_SEARCH_FILTER_KEY}.
    *
-   * <p>
-   *   Note: Currently the use of alternate user search filter is triggered only if the user login name
-   *   is in the username@domain format (e.g. user1@x.y.com) which is the userPrincipalName
-   *   format used in AD.
-   * </p>
    */
-  protected static final String LDAP_ALT_USER_SEARCH_FILTER_DEFAULT = "(&(userPrincipalName={0})(objectClass={userObjectClass}))"; //TODO: we'll need a more generic solution to support any login name format
+  public static final ConfigurationProperty<Integer> VIEW_REQUEST_THREADPOOL_MAX_SIZE = new ConfigurationProperty<>(
+      "view.request.threadpool.size.max", 0);
 
-  private static final String LDAP_GROUP_SEARCH_FILTER_DEFAULT = "";
-  private static final String LDAP_REFERRAL_DEFAULT = "follow";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> VIEW_REQUEST_THREADPOOL_TIMEOUT = new ConfigurationProperty<>(
+      "view.request.threadpool.timeout", 2000);
 
-  private static final String LDAP_SYNC_MEMBER_REPLACE_PATTERN_DEFAULT = "";
-  private static final String LDAP_SYNC_MEMBER_FILTER_DEFAULT = "";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> PROPERTY_PROVIDER_THREADPOOL_MAX_SIZE = new ConfigurationProperty<>(
+      "server.property-provider.threadpool.size.max", PROCESSOR_BASED_THREADPOOL_MAX_SIZE_DEFAULT);
 
   /**
-   * !!! TODO: for development purposes only, should be changed to 'false'
+   *
    */
-  private static final String IS_LDAP_CONFIGURED_DEFAULT = "false";
+  public static final ConfigurationProperty<Integer> PROPERTY_PROVIDER_THREADPOOL_CORE_SIZE = new ConfigurationProperty<>(
+      "server.property-provider.threadpool.size.core",
+      PROCESSOR_BASED_THREADPOOL_CORE_SIZE_DEFAULT);
 
-  private static final String SERVER_PERSISTENCE_TYPE_DEFAULT = "local";
-  private static final String SERVER_CONNECTION_MAX_IDLE_TIME = "server.connection.max.idle.millis";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> PROPERTY_PROVIDER_THREADPOOL_WORKER_QUEUE_SIZE = new ConfigurationProperty<>(
+      "server.property-provider.threadpool.worker.size", Integer.MAX_VALUE);
 
   /**
-   * Default for repo validation suffixes.
+   *
    */
-  private static final String REPO_SUFFIX_DEFAULT = "/repodata/repomd.xml";
-  private static final String REPO_SUFFIX_UBUNTU = "/dists/%s/Release";
+  public static final ConfigurationProperty<Long> PROPERTY_PROVIDER_THREADPOOL_COMPLETION_TIMEOUT = new ConfigurationProperty<>(
+      "server.property-provider.threadpool.completion.timeout", 5000L);
 
-  private static final String PARALLEL_STAGE_EXECUTION_DEFAULT = "true";
+  /**
+   * The time, in {@link TimeUnit#SECONDS}, that HTTP requests remain valid when
+   * inactive.
+   */
+  public static final ConfigurationProperty<Integer> SERVER_HTTP_SESSION_INACTIVE_TIMEOUT = new ConfigurationProperty<>(
+      "server.http.session.inactive_timeout", 1800);
 
-  private static final String CLIENT_THREADPOOL_SIZE_KEY = "client.threadpool.size.max";
-  private static final int CLIENT_THREADPOOL_SIZE_DEFAULT = 25;
-  private static final String AGENT_THREADPOOL_SIZE_KEY = "agent.threadpool.size.max";
-  private static final int AGENT_THREADPOOL_SIZE_DEFAULT = 25;
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> TIMELINE_METRICS_CACHE_DISABLE = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.disabled", Boolean.FALSE);
 
-  private static final String VIEW_EXTRACTION_THREADPOOL_MAX_SIZE_KEY = "view.extraction.threadpool.size.max";
-  private static final int VIEW_EXTRACTION_THREADPOOL_MAX_SIZE_DEFAULT = 20;
-  private static final String VIEW_EXTRACTION_THREADPOOL_CORE_SIZE_KEY = "view.extraction.threadpool.size.core";
-  private static final int VIEW_EXTRACTION_THREADPOOL_CORE_SIZE_DEFAULT = 10;
-  private static final String VIEW_EXTRACTION_THREADPOOL_TIMEOUT_KEY = "view.extraction.threadpool.timeout";
-  private static final long VIEW_EXTRACTION_THREADPOOL_TIMEOUT_DEFAULT = 100000L;
-  private static final String VIEW_REQUEST_THREADPOOL_MAX_SIZE_KEY = "view.request.threadpool.size.max";
-  private static final int VIEW_REQUEST_THREADPOOL_MAX_SIZE_DEFAULT = 0;
-  private static final String VIEW_REQUEST_THREADPOOL_TIMEOUT_KEY = "view.request.threadpool.timeout";
-  private static final int VIEW_REQUEST_THREADPOOL_TIMEOUT_DEFAULT = 2000;
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> TIMELINE_METRICS_CACHE_TTL = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.entry.ttl.seconds", 3600);
 
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> TIMELINE_METRICS_CACHE_IDLE_TIME = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.entry.idle.seconds", 1800);
 
   /**
-   * Threadpool sizing based on the number of available processors multiplied by 2.
+   *
    */
-  public static final int PROCESSOR_BASED_THREADPOOL_CORE_SIZE_DEFAULT = 2 * Runtime.getRuntime().availableProcessors();
+  public static final ConfigurationProperty<Integer> TIMELINE_METRICS_REQUEST_READ_TIMEOUT = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.read.timeout.millis", 10000);
 
   /**
-   * Threadpool sizing based on the number of available processors multiplied by 4.
+   *
    */
-  public static final int PROCESSOR_BASED_THREADPOOL_MAX_SIZE_DEFAULT = 4 * Runtime.getRuntime().availableProcessors();
+  public static final ConfigurationProperty<Integer> TIMELINE_METRICS_REQUEST_INTERVAL_READ_TIMEOUT = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.interval.read.timeout.millis", 10000);
 
-  public static final String PROPERTY_PROVIDER_THREADPOOL_MAX_SIZE_KEY = "server.property-provider.threadpool.size.max";
-  public static final String PROPERTY_PROVIDER_THREADPOOL_CORE_SIZE_KEY = "server.property-provider.threadpool.size.core";
-  public static final String PROPERTY_PROVIDER_THREADPOOL_WORKER_QUEUE_SIZE = "server.property-provider.threadpool.worker.size";
-  public static final String PROPERTY_PROVIDER_THREADPOOL_COMPLETION_TIMEOUT = "server.property-provider.threadpool.completion.timeout";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Integer> TIMELINE_METRICS_REQUEST_CONNECT_TIMEOUT = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.connect.timeout.millis", 5000);
 
-  private static final String SERVER_HTTP_SESSION_INACTIVE_TIMEOUT = "server.http.session.inactive_timeout";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Long> TIMELINE_METRICS_REQUEST_CATCHUP_INTERVAL = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.catchup.interval", 300000L);
 
-  // database pooling defaults
-  private static final String DEFAULT_JDBC_POOL_MIN_CONNECTIONS = "5";
-  private static final String DEFAULT_JDBC_POOL_MAX_CONNECTIONS = "32";
-  private static final String DEFAULT_JDBC_POOL_ACQUISITION_SIZE = "5";
-  private static final String DEFAULT_JDBC_POOL_MAX_IDLE_TIME_SECONDS = "14400";
-  private static final String DEFAULT_JDBC_POOL_EXCESS_MAX_IDLE_TIME_SECONDS = "0";
-  private static final String DEFAULT_JDBC_POOL_MAX_AGE_SECONDS = "0";
-  private static final String DEFAULT_JDBC_POOL_IDLE_TEST_INTERVAL = "7200";
-  private static final String DEFAULT_JDBC_POOL_ACQUISITION_RETRY_ATTEMPTS = "30";
-  private static final String DEFAULT_JDBC_POOL_ACQUISITION_RETRY_DELAY = "1000";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<String> TIMELINE_METRICS_CACHE_HEAP_PERCENT = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.heap.percent", "15%");
 
-  // Timeline Metrics Cache settings
-  private static final String TIMELINE_METRICS_CACHE_DISABLE = "server.timeline.metrics.cache.disabled";
-  private static final String TIMELINE_METRICS_CACHE_MAX_ENTRIES = "server.timeline.metrics.cache.max.entries";
-  private static final String DEFAULT_TIMELINE_METRICS_CACHE_MAX_ENTRIES = "50";
-  private static final String TIMELINE_METRICS_CACHE_TTL = "server.timeline.metrics.cache.entry.ttl.seconds";
-  private static final String DEFAULT_TIMELINE_METRICS_CACHE_TTL = "3600";
-  private static final String TIMELINE_METRICS_CACHE_IDLE_TIME = "server.timeline.metrics.cache.entry.idle.seconds";
-  private static final String DEFAULT_TIMELINE_METRICS_CACHE_IDLE_TIME = "1800";
-  private static final String TIMELINE_METRICS_REQUEST_READ_TIMEOUT = "server.timeline.metrics.cache.read.timeout.millis";
-  private static final String DEFAULT_TIMELINE_METRICS_REQUEST_READ_TIMEOUT = "10000";
-  private static final String TIMELINE_METRICS_REQUEST_INTERVAL_READ_TIMEOUT = "server.timeline.metrics.cache.interval.read.timeout.millis";
-  private static final String DEFAULT_TIMELINE_METRICS_REQUEST_INTERVAL_READ_TIMEOUT = "10000";
-  private static final String TIMELINE_METRICS_REQUEST_CONNECT_TIMEOUT = "server.timeline.metrics.cache.connect.timeout.millis";
-  private static final String DEFAULT_TIMELINE_METRICS_REQUEST_CONNECT_TIMEOUT = "5000";
-  private static final String TIMELINE_METRICS_REQUEST_CATCHUP_INTERVAL = "server.timeline.metrics.cache.catchup.interval";
-  private static final String DEFAULT_TIMELINE_METRICS_REQUEST_CATCHUP_INTERVAL = "300000";
-  private static final String TIMELINE_METRICS_CACHE_HEAP_PERCENT = "server.timeline.metrics.cache.heap.percent";
-  private static final String DEFAULT_TIMELINE_METRICS_CACHE_HEAP_PERCENT = "15%";
-  private static final String TIMELINE_METRICS_CACHE_USE_CUSTOM_SIZING_ENGINE = "server.timeline.metrics.cache.use.custom.sizing.engine";
+  /**
+   *
+   */
+  public static final ConfigurationProperty<Boolean> TIMELINE_METRICS_CACHE_USE_CUSTOM_SIZING_ENGINE = new ConfigurationProperty<>(
+      "server.timeline.metrics.cache.use.custom.sizing.engine", Boolean.TRUE);
 
-  // Timeline Metrics SSL settings
-  public static final String AMRABI_METRICS_HTTPS_ENABLED_KEY = "server.timeline.metrics.https.enabled";
+  /**
+   * Timeline Metrics SSL settings
+   */
+  public static final ConfigurationProperty<Boolean> AMBARI_METRICS_HTTPS_ENABLED = new ConfigurationProperty<>(
+      "server.timeline.metrics.https.enabled", Boolean.FALSE);
 
   /**
    * Governs the use of {@link Parallel} to process {@link StageEntity}
    * instances into {@link Stage}.
    */
-  protected static final String EXPERIMENTAL_CONCURRENCY_STAGE_PROCESSING_ENABLED = "experimental.concurrency.stage_processing.enabled";
+  public static final ConfigurationProperty<Boolean> EXPERIMENTAL_CONCURRENCY_STAGE_PROCESSING_ENABLED = new ConfigurationProperty<>(
+      "experimental.concurrency.stage_processing.enabled", Boolean.FALSE);
 
   /**
    * The full path to the XML file that describes the different alert templates.
    */
-  private static final String ALERT_TEMPLATE_FILE = "alerts.template.file";
+  @Markdown(description="The full path to the XML file that describes the different alert templates.")
+  public static final ConfigurationProperty<String> ALERT_TEMPLATE_FILE = new ConfigurationProperty<>(
+      "alerts.template.file", null);
 
   /**
    * The maximum number of threads which will handle published alert events.
    */
-  public static final String ALERTS_EXECUTION_SCHEDULER_THREADS_KEY = "alerts.execution.scheduler.maxThreads";
-
-  /**
-   * The default core threads for handling published ale

<TRUNCATED>