/**
* Copyright (c) 2009--2014 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.common.conf;
import org.apache.commons.lang.StringUtils;
import com.redhat.rhn.domain.kickstart.KickstartData;
import java.io.File;
/**
* ConfigDefaults is the place to store application specific Config settings
* and convenience methods.
*
* @version $Rev$
*/
public class ConfigDefaults {
private static ConfigDefaults instance = new ConfigDefaults();
public static final String SPACEWALK = "Spacewalk";
//
// Names of the configuration parameters
//
public static final String SSL_AVAILABLE = "ssl_available";
public static final String SYSTEM_CHECKIN_THRESHOLD = "web.system_checkin_threshold";
public static final String WEB_DEFAULT_MAIL_FROM = "web.default_mail_from";
public static final String WEB_ENCRYPTED_PASSWORDS = "web.encrypted_passwords";
public static final String WEB_L10N_RESOURCEBUNDLES = "web.l10n_resourcebundles";
public static final String WEB_PAM_AUTH_SERVICE = "web.pam_auth_service";
public static final String WEB_SESSION_DATABASE_LIFETIME =
"web.session_database_lifetime";
public static final String WEB_SESSION_SECRET_1 = "web.session_secret_1";
public static final String WEB_SESSION_SECRET_2 = "web.session_secret_2";
public static final String WEB_SESSION_SECRET_3 = "web.session_secret_3";
public static final String WEB_SESSION_SECRET_4 = "web.session_secret_4";
public static final String WEB_SESSION_SWAP_SECRET_1 = "web.session_swap_secret_1";
public static final String WEB_SESSION_SWAP_SECRET_2 = "web.session_swap_secret_2";
public static final String WEB_SESSION_SWAP_SECRET_3 = "web.session_swap_secret_3";
public static final String WEB_SESSION_SWAP_SECRET_4 = "web.session_swap_secret_4";
public static final String WEB_SMTP_SERVER = "java.smtp_server";
public static final String ERRATA_CACHE_COMPUTE_THRESHOLD
= "errata_cache_compute_threshold";
public static final String DOWNLOAD_URL_LIFETIME = "java.download_url_lifetime";
public static final String NON_EXPIRABLE_PACKAGE_URLS =
"java.non_expirable_package_urls";
public static final String SATELLITE_PARENT = "server.satellite.rhn_parent";
public static final String JABBER_SERVER = "server.jabber_server";
public static final String KICKSTART_HOST = "kickstart_host";
public static final String CONFIG_REVISION_MAX_SIZE = "web.maximum_config_file_size";
public static final String WEB_EXCLUDED_COUNTRIES = "java.excluded_countries";
public static final String DISCONNECTED = "disconnected";
public static final String DEFAULT_SAT_PARENT = "satellite.rhn.redhat.com";
public static final String PRODUCT_NAME = "web.product_name";
public static final String COBBLER_AUTOMATED_USER = "java.taskomatic_cobbler_user";
public static final String DOC_REFERENCE_GUIDE = "docs.reference_guide";
public static final String DOC_INSTALL_GUIDE = "docs.install_guide";
public static final String DOC_PROXY_GUIDE = "docs.proxy_guide";
public static final String DOC_CLIENT_CONFIG_GUIDE = "docs.client_config_guide";
public static final String DOC_USER_GUIDE = "docs.user_guide";
public static final String DOC_GETTING_STARTED_GUIDE = "docs.getting_started_guide";
public static final String DOC_RELEASE_NOTES = "docs.release_notes";
public static final String WEB_SUBSCRIBE_PROXY_CHANNEL = "web.subscribe_proxy_channel";
public static final String TAKE_SNAPSHOTS = "enable_snapshots";
public static final String ACTIONS_DISPLAY_LIMIT = "java.actions_display_limit";
public static final String CONFIG_FILE_EDIT_SIZE = "java.config_file_edit_size";
/**
* The default maximum size for config revisions, (128 K)
*/
public static final int DEFAULT_CONFIG_REVISION_MAX_SIZE = 131072;
public static final String REPOMD_PATH_PREFIX = "taskomatic.repomd_path_prefix";
public static final String REPOMD_CACHE_MOUNT_POINT = "repomd_cache_mount_point";
public static final String DEFAULT_KICKSTART_PACKAGE_NAME = "spacewalk-koan";
public static final String KICKSTART_PACKAGE_NAME = "kickstart_package";
public static final String MOUNT_POINT = "mount_point";
public static final String KICKSTART_MOUNT_POINT = "kickstart_mount_point";
public static final String PAGE_SIZES = "web.page_sizes";
public static final String DEFAULT_PAGE_SIZE = "web.default_page_size";
public static final String KICKSTART_COBBLER_DIR = "kickstart.cobbler.dir";
public static final String COBBLER_SNIPPETS_DIR = "cobbler.snippets.dir";
private static final String DEFAULT_COBBLER_SNIPPET_DIR = "/var/lib/cobbler/snippets";
private static final String COBBLER_NAME_SEPARATOR = "cobbler.name.separator";
public static final String POWER_MANAGEMENT_TYPES = "java.power_management.types";
public static final String KVM_VIRT_PATH_DIR = "kickstart.virt_storage_path_kvm";
public static final String XEN_VIRT_PATH_DIR = "kickstart.virt_storage_path_xen";
private static final String DEFAULT_XEN_VIRT_PATH = "/var/lib/xen/images";
private static final String DEFAULT_KVM_VIRT_PATH = "/var/lib/libvirt/images";
public static final String VIRT_BRIDGE = "kickstart.virt_bridge";
public static final String VIRT_MEM = "kickstart.virt_mem_size_mb";
public static final String VIRT_CPU = "kickstart.virt_cpus";
public static final String VIRT_DISK = "kickstart.virt_disk_size_gb";
public static final String KICKSTART_NETWORK_INTERFACE = "kickstart.default_interface";
public static final String SPACEWALK_REPOSYNC_PATH = "spacewalk_reposync_path";
public static final String SPACEWALK_REPOSYNC_LOG_PATH = "spacewalk_reposync_logpath";
public static final String USE_DB_REPODATA = "user_db_repodata";
public static final String CONFIG_MACRO_ARGUMENT_REGEX = "config_macro_argument_regex";
public static final String DB_BACKEND = "db_backend";
public static final String DB_BACKEND_ORACLE = "oracle";
public static final String DB_BACKEND_POSTGRESQL = "postgresql";
public static final String DB_USER = "db_user";
public static final String DB_PASSWORD = "db_password";
public static final String DB_NAME = "db_name";
public static final String DB_HOST = "db_host";
public static final String DB_PORT = "db_port";
public static final String DB_SSL_ENABLED = "db_ssl_enabled";
public static final String DB_PROTO = "hibernate.connection.driver_proto";
public static final String DB_CLASS = "hibernate.connection.driver_class";
public static final String SSL_TRUSTSTORE = "java.ssl_truststore";
public static final String LOOKUP_EXCEPT_SEND_EMAIL = "lookup_exception_email";
public static final String KS_PARTITION_DEFAULT = "kickstart.partition.default";
/**
* System Currency defaults
*/
public static final String SYSTEM_CURRENCY_CRIT = "java.sc_crit";
public static final String SYSTEM_CURRENCY_IMP = "java.sc_imp";
public static final String SYSTEM_CURRENCY_MOD = "java.sc_mod";
public static final String SYSTEM_CURRENCY_LOW = "java.sc_low";
public static final String SYSTEM_CURRENCY_BUG = "java.sc_bug";
public static final String SYSTEM_CURRENCY_ENH = "java.sc_enh";
/**
* Taskomatic defaults
*/
public static final String TASKOMATIC_CHANNEL_REPODATA_WORKERS
= "java.taskomatic_channel_repodata_workers";
private ConfigDefaults() {
}
/**
* Returns the System Currency multiplier for critical security errata
* @return the System Currency multiplier for critical security errata
*/
public Integer getSCCrit() {
return Config.get().getInt(SYSTEM_CURRENCY_CRIT, 32);
}
/**
* Returns the System Currency multiplier for important security errata
* @return the System Currency multiplier for important security errata
*/
public Integer getSCImp() {
return Config.get().getInt(SYSTEM_CURRENCY_IMP, 16);
}
/**
* Returns the System Currency multiplier for moderate security errata
* @return the System Currency multiplier for moderate security errata
*/
public Integer getSCMod() {
return Config.get().getInt(SYSTEM_CURRENCY_MOD, 8);
}
/**
* Returns the System Currency multiplier for low security errata
* @return the System Currency multiplier for low security errata
*/
public Integer getSCLow() {
return Config.get().getInt(SYSTEM_CURRENCY_LOW, 4);
}
/**
* Returns the System Currency multiplier for bug fix errata
* @return the System Currency multiplier for bug fix errata
*/
public Integer getSCBug() {
return Config.get().getInt(SYSTEM_CURRENCY_BUG, 2);
}
/**
* Returns the System Currency multiplier for enhancement errata
* @return the System Currency multiplier for enhancement errata
*/
public Integer getSCEnh() {
return Config.get().getInt(SYSTEM_CURRENCY_ENH, 1);
}
/**
* Get instance of ConfigDefaults.
* @return ConfigDefaults instance.
*/
public static ConfigDefaults get() {
return instance;
}
/**
* Return the kickstart mount point directory
* Note the mount point is guaranteed to have a
* '/' at the end of the string so you can use it
* for appending sub directories.
* @return the ks mount point directory.
*/
public String getKickstartMountPoint() {
String mount = StringUtils.defaultIfEmpty(
Config.get().getString(KICKSTART_MOUNT_POINT),
Config.get().getString(MOUNT_POINT)).trim();
if (!mount.endsWith("/")) {
mount = mount + "/";
}
return mount;
}
/**
* Returns the default kickstart package name
* @return the default kickstart package name
*/
public String getKickstartPackageName() {
return StringUtils.defaultIfEmpty(Config.get().getString(KICKSTART_PACKAGE_NAME),
DEFAULT_KICKSTART_PACKAGE_NAME).trim();
}
/**
* Get the user string for use with authorization between Spacewalk
* and Cobbler if there is no actual user in context.
*
* @return String from our config
*/
public String getCobblerAutomatedUser() {
return Config.get().getString(COBBLER_AUTOMATED_USER, "taskomatic_user");
}
/**
* Returns all the available page sizes.
* Note this is only meant to check
* if the web.page_sizes config entry is set
* you might want to use PageSizeDecorator.getPageSizes instead.
* @see com.redhat.rhn.frontend.taglibs.list.decorators.PageSizeDecorator
* for more info.
* @return the comma separated list of page sizes or "".
*/
public String getPageSizes() {
return Config.get().getString(PAGE_SIZES, "");
}
/**
* Returns the default page size config entry.
* Note this is only meant to check
* if the web.default_page_size config entry is set
* you might want to use PageSizeDecorator.getDefaultPageSize instead.
* @see com.redhat.rhn.frontend.taglibs.list.decorators.PageSizeDecorator
* for more info.
* @return the default page size config entry or "".
*/
public String getDefaultPageSize() {
return Config.get().getString(DEFAULT_PAGE_SIZE, "");
}
/**
* Returns the directory which hosts all the
* cobbler kickstart .cfg files..
* All the .cfg files that have been generated
* by spacewalk will be either at
* ${kickstart.cobbler.dir}/wizard or
* ${kickstart.cobbler.dir}/upload
* @return the dir which has the kickstarts
*/
public String getKickstartConfigDir() {
return Config.get().getString(KICKSTART_COBBLER_DIR, "/var/lib/rhn/kickstarts/");
}
/**
* Returns the directory which hosts all the
* org specific cobbler snippets files..
* All the snippet files that have been generated
* by spacewalk will be at
* /var/lib/cobbler/snippets
*
* @return the dir which has the kickstarts cobbler snippets
*/
public String getCobblerSnippetsDir() {
return Config.get().getString(COBBLER_SNIPPETS_DIR, DEFAULT_COBBLER_SNIPPET_DIR);
}
/**
* Returns the base directory where the virt artifacts will be stored.
* This information is used while setting up system records and so on..
* @param xen true if the virt path required is for a xen virt type.
* @return the virt path..
*/
public File getVirtPath(boolean xen) {
String virtPath = xen ? XEN_VIRT_PATH_DIR : KVM_VIRT_PATH_DIR;
String defaultVirtPath = xen ? DEFAULT_XEN_VIRT_PATH : DEFAULT_KVM_VIRT_PATH;
return new File(Config.get().getString(virtPath, defaultVirtPath));
}
/**
* Returns the default value for the xen virt bridge
* @return the value for virt bridge.
*/
public String getDefaultXenVirtBridge() {
return Config.get().getString(VIRT_BRIDGE, "xenbr0");
}
/**
* Returns the default value for the xen virt bridge
* @return the value for virt bridge.
*/
public String getDefaultKVMVirtBridge() {
return Config.get().getString(VIRT_BRIDGE, "virbr0");
}
/**
* Returns the default virt disk size in GBs
* @return the virt disk size
*/
public int getDefaultVirtDiskSize() {
return Config.get().getInt(VIRT_DISK, 3);
}
/**
* Returns the default VirtMemory Size in MBs
* @param data the kickstart data, so we can tell if it's RHEL 7
* @return the memory size
*/
public int getDefaultVirtMemorySize(KickstartData data) {
// RHEL 7 requires at least 1024 MB of ram to install
if (data.isRhel7OrGreater()) {
return Config.get().getInt(VIRT_MEM, 1024);
}
return Config.get().getInt(VIRT_MEM, 512);
}
/**
* Returns the default number of virt cpus
* @return the number of virt cpus
*/
public int getDefaultVirtCpus() {
return Config.get().getInt(VIRT_CPU, 1);
}
/**
* Return <code>true</code> if SSL is available for web traffic.
*
* @return <code>true</code> if SSL is available for web traffic.
*/
public boolean isSSLAvailable() {
return Config.get().getBoolean(SSL_AVAILABLE);
}
/**
* Check if this Sat is disconnected or not
* @return boolean if this sat is disconnected or not
*/
public boolean isDisconnected() {
return (Config.get().getBoolean(DISCONNECTED));
}
/**
* Get the configured hostname for this RHN Server.
* @return String hostname
*/
public String getHostname() {
return Config.get().getString(JABBER_SERVER);
}
/**
* Returns the URL for the search server, if not defined returns
* http://localhost:2828/RPC2
* @return the URL for the search server.
*/
public String getSearchServerUrl() {
String searchServerHost =
Config.get().getString("search_server.host", "localhost");
int searchServerPort = Config.get().getInt("search_server.port", 2828);
return "http://" + searchServerHost + ":" + searchServerPort + "/RPC2";
}
/**
* Returns the URL for the tasko server, if not defined returns
* http://localhost:2829/RPC2
* @return the URL for the search server.
*/
public String getTaskoServerUrl() {
String taskoServerHost =
Config.get().getString("tasko_server.host", "localhost");
int taskoServerPort = Config.get().getInt("tasko_server.port", 2829);
return "http://" + taskoServerHost + ":" + taskoServerPort + "/RPC2";
}
/**
* Get the URL to the cobbler server
* @return http url
*/
public String getCobblerServerUrl() {
String cobblerServer = getCobblerHost();
int cobblerServerPort = Config.get().getInt("cobbler.port", 80);
return "http://" + cobblerServer + ":" + cobblerServerPort;
}
/**
* Get just the cobbler hostname
* @return the cobbler hostname
*/
public String getCobblerHost() {
return Config.get().getString("cobbler.host", "localhost");
}
/**
* get the text to print at the top of a kickstart template
* @return the header
*/
public String getKickstartTemplateHeader() {
return Config.get().getString("kickstart.header", "#errorCatcher ListErrors");
}
/**
* Returns the default network interface for a kickstart profile
* @return the network interface
*/
public String getDefaultKickstartNetworkInterface() {
return Config.get().getString(KICKSTART_NETWORK_INTERFACE, "eth0");
}
/**
* Return true if this is a Spacewalk instance. (as opposed to Satellite)
* @return true is this is a Spacewalk instance.
*/
public boolean isSpacewalk() {
if (Config.get().getString(PRODUCT_NAME).equals(SPACEWALK)) {
return true;
}
return false;
}
/**
* Return true if you are to use/save repodata into the DB
* @return true or false
*/
public boolean useDBRepodata() {
if (Config.get().getString(USE_DB_REPODATA) == null) {
return true;
}
return Config.get().getBoolean(USE_DB_REPODATA);
}
/**
* Get the seperator to use when creating cobbler namse
* defaults to ':'
* @return the seperator
*/
public String getCobblerNameSeparator() {
return Config.get().getString(COBBLER_NAME_SEPARATOR, ":");
}
/**
* Returns power management types supported by Cobbler
* @return the types
*/
public String getCobblerPowerTypes() {
return Config.get().getString(POWER_MANAGEMENT_TYPES);
}
/**
* is the server configured to use oracle
* @return true if so
*/
public boolean isOracle() {
return DB_BACKEND_ORACLE.equals(Config.get().getString(DB_BACKEND));
}
/**
* is the server configured to use oracle
* @return true if so
*/
public boolean isPostgresql() {
return DB_BACKEND_POSTGRESQL.equals(Config.get().getString(DB_BACKEND));
}
private void setSslTrustStore() throws ConfigException {
String trustStore = Config.get().getString(SSL_TRUSTSTORE);
if (trustStore == null || !new File(trustStore).isFile()) {
throw new ConfigException("Can not find java truststore at " +
trustStore + ". Path can be changed with " +
SSL_TRUSTSTORE + " option.");
}
System.setProperty("javax.net.ssl.trustStore", trustStore);
}
/**
* Constructs JDBC connection string based on configuration, checks for
* some basic sanity.
* @return JDBC connection string
* @throws ConfigException if unknown database backend is set,
*/
public String getJdbcConnectionString() throws ConfigException {
String dbName = Config.get().getString(DB_NAME);
String dbHost = Config.get().getString(DB_HOST);
String dbPort = Config.get().getString(DB_PORT);
String dbProto = Config.get().getString(DB_PROTO);
boolean dbSslEnabled = Config.get().getBoolean(DB_SSL_ENABLED);
String connectionUrl;
if (isOracle()) {
connectionUrl = dbProto + ":@";
if (dbProto.contains("thin")) {
connectionUrl += dbHost + ":" + dbPort + ":";
}
connectionUrl += dbName;
if (dbSslEnabled) {
throw new ConfigException(
"SSL is not supported for Oracle database backend");
}
}
else if (isPostgresql()) {
connectionUrl = dbProto + ":";
if (dbHost != null && dbHost.length() > 0) {
connectionUrl += "//" + dbHost;
if (dbPort != null && dbPort.length() > 0) {
connectionUrl += ":" + dbPort;
}
connectionUrl += "/";
}
connectionUrl += dbName;
if (dbSslEnabled) {
connectionUrl += "?ssl=true";
setSslTrustStore();
}
}
else {
throw new ConfigException(
"Unknown db backend set, expecting oracle or postgresql");
}
return connectionUrl;
}
/**
* is documentation available
* @return true if so
*/
public boolean isDocAvailable() {
return !isSpacewalk();
}
/**
* Returns Max taskomatic channel repodata workers
* @return Max taskomatic channel repodata workers
*/
public int getTaskoChannelRepodataWorkers() {
return Config.get().getInt(TASKOMATIC_CHANNEL_REPODATA_WORKERS, 1);
}
/**
* Returns actions display limit
* @return actions display limit
*/
public int getActionsDisplayLimit() {
return Config.get().getInt(ACTIONS_DISPLAY_LIMIT, 10000);
}
/**
* Returns config file editable size (in KB)
* @return config file editable size (in KB)
*/
public int getConfigFileEditSize() {
return Config.get().getInt(CONFIG_FILE_EDIT_SIZE, 32);
}
}