package org.batfish.coordinator; import org.batfish.common.BaseSettings; import org.batfish.common.BatfishLogger; import org.batfish.common.BfConsts; import org.batfish.common.CoordConsts; import org.batfish.common.util.CommonUtil; import org.batfish.coordinator.authorizer.Authorizer; import org.batfish.coordinator.config.ConfigurationLocator; import org.batfish.coordinator.queues.WorkQueue; public class Settings extends BaseSettings { private static final String ARG_ALLOW_DEFAULT_KEY_LISTINGS = "allowdefaultkeylistings"; private static final String ARG_AUTHORIZER_TYPE = "authorizertype"; private static final String ARG_CONTAINERS_LOCATION = "containerslocation"; private static final String ARG_DB_AUTHORIZER_CACHE_EXPIRY_MS = "dbcacheexpiry"; private static final String ARG_DB_AUTHORIZER_CONN_STRING = "dbconnection"; private static final String ARG_DISABLE_SSL = "disablessl"; private static final String ARG_DRIVER_CLASS = "driverclass"; /** * (the arguments below are not wired to command line) */ private static final String ARG_FILE_AUTHORIZER_PERMS_FILE = "fileauthpermsfile"; private static final String ARG_FILE_AUTHORIZER_ROOT_DIR = "fileauthrootdir"; private static final String ARG_FILE_AUTHORIZER_USERS_FILE = "fileauthusersfile"; private static final String ARG_HELP = "help"; private static final String ARG_LOG_FILE = "logfile"; private static final String ARG_LOG_LEVEL = "loglevel"; private static final String ARG_PERIOD_ASSIGN_WORK_MS = "periodassignworkms"; private static final String ARG_PERIOD_CHECK_WORK_MS = "periodcheckworkms"; private static final String ARG_PERIOD_WORKER_STATUS_REFRESH_MS = "periodworkerrefreshms"; private static final String ARG_QUEUE_COMPLETED_WORK = "qcompletedwork"; private static final String ARG_QUEUE_INCOMPLETE_WORK = "qincompletework"; private static final String ARG_QUEUE_TYPE = "qtype"; private static final String ARG_SERVICE_HOST = "servicehost"; private static final String ARG_SERVICE_POOL_PORT = "poolport"; private static final String ARG_SERVICE_WORK_PORT = "workport"; private static final String ARG_SSL_KEYSTORE_FILE = "sslkeystorefile"; private static final String ARG_SSL_KEYSTORE_PASSWORD = "sslkeystorepassword"; /** * Need when using Azure queues for storing work items */ private static final String ARG_STORAGE_ACCOUNT_KEY = "storageaccountkey"; private static final String ARG_STORAGE_ACCOUNT_NAME = "storageaccountname"; private static final String ARG_STORAGE_PROTOCOL = "storageprotocol"; private static final String EXECUTABLE_NAME = "coordinator"; private Authorizer.Type _authorizerType; private String _containersLocation; private String _dbAuthorizerConnString; private long _dbCacheExpiryMs; private boolean _defaultKeyListings; private String _driverClass; private String _logFile; private String _logLevel; private long _periodAssignWorkMs; private long _periodCheckWorkMs; private long _periodWorkerStatusRefreshMs; private String _queueCompletedWork; private WorkQueue.Type _queueType; private String _queuIncompleteWork; private String _serviceHost; private int _servicePoolPort; private int _serviceWorkPort; private String _sslKeystoreFilename; private String _storageAccountKey; private String _storageAccountName; private String _storageProtocol; private boolean _useSsl; public Settings(String[] args) throws Exception { super(CommonUtil.getConfigProperties(ConfigurationLocator.class, BfConsts.RELPATH_CONFIG_FILE_NAME_COORDINATOR)); initConfigDefaults(); initOptions(); parseCommandLine(args); } public Authorizer.Type getAuthorizationType() { return _authorizerType; } public String getContainersLocation() { return _containersLocation; } public long getDbAuthorizerCacheExpiryMs() { return _dbCacheExpiryMs; } public String getDbAuthorizerConnString() { return _dbAuthorizerConnString; } public boolean getDefaultKeyListings() { return _defaultKeyListings; } public String getDriverClass() { return _driverClass; } public String getFileAuthorizerPermsFile() { return _config.getString(ARG_FILE_AUTHORIZER_PERMS_FILE); } public String getFileAuthorizerRootDir() { return _config.getString(ARG_FILE_AUTHORIZER_ROOT_DIR); } public String getFileAuthorizerUsersFile() { return _config.getString(ARG_FILE_AUTHORIZER_USERS_FILE); } public String getLogFile() { return _logFile; } public String getLogLevel() { return _logLevel; } public long getPeriodAssignWorkMs() { return _periodAssignWorkMs; } public long getPeriodCheckWorkMs() { return _periodCheckWorkMs; } public long getPeriodWorkerStatusRefreshMs() { return _periodWorkerStatusRefreshMs; } public String getQueueCompletedWork() { return _queueCompletedWork; } public String getQueueIncompleteWork() { return _queuIncompleteWork; } public WorkQueue.Type getQueueType() { return _queueType; } public String getServiceHost() { return _serviceHost; } public int getServicePoolPort() { return _servicePoolPort; } public int getServiceWorkPort() { return _serviceWorkPort; } public String getSslKeystoreFilename() { return _sslKeystoreFilename; } public String getSslKeystorePassword() { return _config.getString(ARG_SSL_KEYSTORE_PASSWORD); } public String getStorageAccountKey() { return _storageAccountKey; } public String getStorageAccountName() { return _storageAccountName; } public String getStorageProtocol() { return _storageProtocol; } public boolean getUseSsl() { return _useSsl; } private void initConfigDefaults() { setDefaultProperty(ARG_AUTHORIZER_TYPE, Authorizer.Type.none.toString()); setDefaultProperty(ARG_ALLOW_DEFAULT_KEY_LISTINGS, false); setDefaultProperty(ARG_DB_AUTHORIZER_CONN_STRING, "jdbc:mysql://localhost/batfish?user=batfish&password=batfish"); setDefaultProperty(ARG_DB_AUTHORIZER_CACHE_EXPIRY_MS, 15 * 60 * 1000); // 15 // minutes setDefaultProperty(ARG_DISABLE_SSL, CoordConsts.SVC_DISABLE_SSL); setDefaultProperty(ARG_DRIVER_CLASS, null); setDefaultProperty(ARG_FILE_AUTHORIZER_PERMS_FILE, "perms.json"); setDefaultProperty(ARG_FILE_AUTHORIZER_ROOT_DIR, "fileauthorizer"); setDefaultProperty(ARG_FILE_AUTHORIZER_USERS_FILE, "users.json"); setDefaultProperty(ARG_HELP, false); setDefaultProperty(ARG_LOG_FILE, null); setDefaultProperty(ARG_LOG_LEVEL, BatfishLogger.getLogLevelStr(BatfishLogger.LEVEL_OUTPUT)); setDefaultProperty(ARG_PERIOD_ASSIGN_WORK_MS, 1000); setDefaultProperty(ARG_PERIOD_CHECK_WORK_MS, 1000); setDefaultProperty(ARG_PERIOD_WORKER_STATUS_REFRESH_MS, 10000); setDefaultProperty(ARG_QUEUE_COMPLETED_WORK, "batfishcompletedwork"); setDefaultProperty(ARG_QUEUE_INCOMPLETE_WORK, "batfishincompletework"); setDefaultProperty(ARG_QUEUE_TYPE, WorkQueue.Type.memory.toString()); setDefaultProperty(ARG_SERVICE_HOST, "0.0.0.0"); setDefaultProperty(ARG_SERVICE_POOL_PORT, CoordConsts.SVC_POOL_PORT); setDefaultProperty(ARG_SERVICE_WORK_PORT, CoordConsts.SVC_WORK_PORT); setDefaultProperty(ARG_SSL_KEYSTORE_FILE, "selfsigned.jks"); setDefaultProperty(ARG_SSL_KEYSTORE_PASSWORD, "batfish"); setDefaultProperty(ARG_STORAGE_ACCOUNT_KEY, "zRTT++dVryOWXJyAM7NM0TuQcu0Y23BgCQfkt7xh2f/Mm+r6c8/XtPTY0xxaF6tPSACJiuACsjotDeNIVyXM8Q=="); setDefaultProperty(ARG_STORAGE_ACCOUNT_NAME, "testdrive"); setDefaultProperty(ARG_STORAGE_PROTOCOL, "http"); setDefaultProperty(ARG_CONTAINERS_LOCATION, "containers"); } private void initOptions() { addOption(ARG_AUTHORIZER_TYPE, "type of authorizer to use", "authorizer type"); addBooleanOption(ARG_ALLOW_DEFAULT_KEY_LISTINGS, "allow default API key to list containers and testrigs"); addOption(ARG_DB_AUTHORIZER_CONN_STRING, "connection string for authorizer db", "connection string"); addOption(ARG_DB_AUTHORIZER_CACHE_EXPIRY_MS, "when to expire information from authorizer database", "expiration time (ms)"); addBooleanOption(ARG_DISABLE_SSL, "disable coordinator ssl"); addBooleanOption(ARG_DRIVER_CLASS, "jdbc driver class to load explicitly"); addBooleanOption(ARG_HELP, "print this message"); addOption(ARG_LOG_FILE, "send output to specified log file", "logfile"); addOption(ARG_LOG_LEVEL, "log level", "loglevel"); addOption(ARG_PERIOD_WORKER_STATUS_REFRESH_MS, "period with which to check worker status (ms)", "period_worker_status_refresh_ms"); addOption(ARG_PERIOD_ASSIGN_WORK_MS, "period with which to assign work (ms)", "period_assign_work_ms"); addOption(ARG_PERIOD_CHECK_WORK_MS, "period with which to check work (ms)", "period_check_work_ms"); addOption(ARG_QUEUE_TYPE, "queue type to use {azure, memory}", "qtype"); addOption(ARG_SERVICE_HOST, "hostname for the service", "base url for coordinator service"); addOption(ARG_SERVICE_POOL_PORT, "port for pool management service", "port_number_pool_service"); addOption(ARG_SERVICE_WORK_PORT, "port for work management service", "port_number_work_service"); addOption(ARG_SSL_KEYSTORE_FILE, "which keystore file to use for ssl", "keystore (.jks) file"); addOption(ARG_CONTAINERS_LOCATION, "where to store containers", "containers_location"); } private void parseCommandLine(String[] args) { initCommandLine(args); if (getBooleanOptionValue(ARG_HELP)) { printHelp(EXECUTABLE_NAME); System.exit(0); } _authorizerType = Authorizer.Type .valueOf(getStringOptionValue(ARG_AUTHORIZER_TYPE)); _dbAuthorizerConnString = getStringOptionValue( ARG_DB_AUTHORIZER_CONN_STRING); _dbCacheExpiryMs = getLongOptionValue(ARG_DB_AUTHORIZER_CACHE_EXPIRY_MS); _defaultKeyListings = getBooleanOptionValue( ARG_ALLOW_DEFAULT_KEY_LISTINGS); _driverClass = getStringOptionValue(ARG_DRIVER_CLASS); _queuIncompleteWork = getStringOptionValue(ARG_QUEUE_INCOMPLETE_WORK); _queueCompletedWork = getStringOptionValue(ARG_QUEUE_COMPLETED_WORK); _queueType = WorkQueue.Type.valueOf(getStringOptionValue(ARG_QUEUE_TYPE)); _servicePoolPort = getIntegerOptionValue(ARG_SERVICE_POOL_PORT); _serviceWorkPort = getIntegerOptionValue(ARG_SERVICE_WORK_PORT); _serviceHost = getStringOptionValue(ARG_SERVICE_HOST); _sslKeystoreFilename = getStringOptionValue(ARG_SSL_KEYSTORE_FILE); _storageAccountKey = getStringOptionValue(ARG_STORAGE_ACCOUNT_KEY); _storageAccountName = getStringOptionValue(ARG_STORAGE_ACCOUNT_NAME); _storageProtocol = getStringOptionValue(ARG_STORAGE_PROTOCOL); _containersLocation = getStringOptionValue(ARG_CONTAINERS_LOCATION); _periodWorkerStatusRefreshMs = getLongOptionValue( ARG_PERIOD_WORKER_STATUS_REFRESH_MS); _periodAssignWorkMs = getLongOptionValue(ARG_PERIOD_ASSIGN_WORK_MS); _periodCheckWorkMs = getLongOptionValue(ARG_PERIOD_CHECK_WORK_MS); _logFile = getStringOptionValue(ARG_LOG_FILE); _logLevel = getStringOptionValue(ARG_LOG_LEVEL); _useSsl = !getBooleanOptionValue(ARG_DISABLE_SSL); } }