Merge "Enable configuration via environment variables"
This commit is contained in:
commit
262ec2c995
@ -67,7 +67,7 @@ class RecheckWatchBot(irc.bot.SingleServerIRCBot):
|
||||
def __init__(self, channels, config):
|
||||
super(RecheckWatchBot, self).__init__(
|
||||
[(config.ircbot_server,
|
||||
config.ircbot_port,
|
||||
int(config.ircbot_port),
|
||||
config.ircbot_server_password)],
|
||||
config.ircbot_nick,
|
||||
config.ircbot_nick)
|
||||
|
@ -16,19 +16,20 @@ import os
|
||||
import re
|
||||
import configparser
|
||||
|
||||
DEFAULT_INDEX_FORMAT = 'logstash-%Y.%m.%d'
|
||||
|
||||
ES_URL = 'http://logstash.openstack.org:80/elasticsearch'
|
||||
LS_URL = 'http://logstash.openstack.org'
|
||||
DB_URI = 'mysql+pymysql://query:query@logstash.openstack.org/subunit2sql'
|
||||
|
||||
JOBS_RE = 'dsvm'
|
||||
CI_USERNAME = 'jenkins'
|
||||
|
||||
GERRIT_QUERY_FILE = 'queries'
|
||||
GERRIT_HOST = 'review.opendev.org'
|
||||
|
||||
PID_FN = '/var/run/elastic-recheck/elastic-recheck.pid'
|
||||
# Can be overriden by defining environment variables with same name
|
||||
DEFAULTS = {
|
||||
'ES_URL': 'http://logstash.openstack.org:80/elasticsearch',
|
||||
'LS_URL': 'http://logstash.openstack.org',
|
||||
'DB_URI': 'mysql+pymysql://query:query@logstash.openstack.org/subunit2sql',
|
||||
'server_password': '',
|
||||
'CI_USERNAME': 'jenkins',
|
||||
'JOBS_RE': 'dsvm',
|
||||
'PID_FN': '/var/run/elastic-recheck/elastic-recheck.pid',
|
||||
'INDEX_FORMAT': r'logstash-%Y.%m.%d',
|
||||
'GERRIT_QUERY_FILE': 'queries',
|
||||
'GERRIT_HOST': 'review.opendev.org',
|
||||
'IRC_LOG_CONFIG': None
|
||||
}
|
||||
|
||||
# Not all teams actively used elastic recheck for categorizing their
|
||||
# work, so to keep the uncategorized page more meaningful, we exclude
|
||||
@ -82,76 +83,61 @@ class Config(object):
|
||||
uncat_search_size=None,
|
||||
gerrit_query_file=None):
|
||||
|
||||
self.es_url = es_url or ES_URL
|
||||
self.ls_url = ls_url or LS_URL
|
||||
self.db_uri = db_uri or DB_URI
|
||||
self.jobs_re = jobs_re or JOBS_RE
|
||||
self.ci_username = ci_username or CI_USERNAME
|
||||
self.es_index_format = es_index_format or DEFAULT_INDEX_FORMAT
|
||||
self.pid_fn = pid_fn or PID_FN
|
||||
# override defaults with environment variables
|
||||
for key, val in os.environ.items():
|
||||
if key in DEFAULTS:
|
||||
DEFAULTS[key] = val
|
||||
|
||||
self.es_url = es_url or DEFAULTS['ES_URL']
|
||||
self.ls_url = ls_url or DEFAULTS['LS_URL']
|
||||
self.db_uri = db_uri or DEFAULTS['DB_URI']
|
||||
self.jobs_re = jobs_re or DEFAULTS['JOBS_RE']
|
||||
self.ci_username = ci_username or DEFAULTS['CI_USERNAME']
|
||||
self.es_index_format = es_index_format or DEFAULTS['INDEX_FORMAT']
|
||||
self.pid_fn = pid_fn or DEFAULTS['PID_FN']
|
||||
self.ircbot_channel_config = None
|
||||
self.irc_log_config = None
|
||||
self.irc_log_config = DEFAULTS['IRC_LOG_CONFIG']
|
||||
self.all_fails_query = all_fails_query or ALL_FAILS_QUERY
|
||||
self.excluded_jobs_regex = excluded_jobs_regex or EXCLUDED_JOBS_REGEX
|
||||
self.included_projects_regex = \
|
||||
included_projects_regex or INCLUDED_PROJECTS_REGEX
|
||||
self.uncat_search_size = uncat_search_size or UNCAT_MAX_SEARCH_SIZE
|
||||
self.gerrit_query_file = gerrit_query_file or GERRIT_QUERY_FILE
|
||||
self.gerrit_query_file = (gerrit_query_file or
|
||||
DEFAULTS['GERRIT_QUERY_FILE'])
|
||||
self.gerrit_user = None
|
||||
self.gerrit_host = None
|
||||
self.gerrit_host_key = None
|
||||
|
||||
if config_file or config_obj:
|
||||
if config_obj:
|
||||
config = config_obj
|
||||
else:
|
||||
config = configparser.ConfigParser(
|
||||
{'es_url': ES_URL,
|
||||
'ls_url': LS_URL,
|
||||
'db_uri': DB_URI,
|
||||
'server_password': '',
|
||||
'ci_username': CI_USERNAME,
|
||||
'jobs_re': JOBS_RE,
|
||||
'pidfile': PID_FN,
|
||||
'index_format': DEFAULT_INDEX_FORMAT,
|
||||
'query_file': GERRIT_QUERY_FILE
|
||||
}
|
||||
)
|
||||
config = configparser.ConfigParser()
|
||||
config.read(config_file)
|
||||
|
||||
if config.has_section('data_source'):
|
||||
self.es_url = config.get('data_source', 'es_url')
|
||||
self.ls_url = config.get('data_source', 'ls_url')
|
||||
self.db_uri = config.get('data_source', 'db_uri')
|
||||
self.es_index_format = config.get('data_source',
|
||||
'index_format')
|
||||
|
||||
if config.has_section('recheckwatch'):
|
||||
self.ci_username = config.get('recheckwatch', 'ci_username')
|
||||
self.jobs_re = config.get('recheckwatch', 'jobs_re')
|
||||
|
||||
if config.has_section('gerrit'):
|
||||
self.gerrit_user = config.get('gerrit', 'user')
|
||||
self.gerrit_query_file = config.get('gerrit', 'query_file')
|
||||
# workaround for python api change:
|
||||
# https://docs.python.org/3/library/configparser.html#fallback-values
|
||||
cfg_map = {
|
||||
'db_uri': ('data_source', 'db_uri'),
|
||||
'es_url': ('data_source', 'es_url'),
|
||||
'gerrit_host': ('gerrit', 'host'),
|
||||
'gerrit_host_key': ('gerrit', 'key'),
|
||||
'gerrit_query_file': ('gerrit', 'query_file'),
|
||||
'gerrit_user': ('gerrit', 'user'),
|
||||
'index_format': ('data_source', 'index_format'),
|
||||
'irc_log_config': ('ircbot', 'log_config'),
|
||||
'ircbot_channel_config': ('ircbot', 'channel_config'),
|
||||
'ircbot_server': ('ircbot', 'server_password'),
|
||||
'ircbot_sever_password': ('ircbot', 'port'),
|
||||
'jobs_re': ('recheckwatch', 'jobs_re'),
|
||||
'ls_url': ('data_source', 'ls_url'),
|
||||
'nick': ('ircbot', 'nick'),
|
||||
'pass': ('ircbot', 'pass'),
|
||||
'pid_fn': ('ircbot', 'pidfile'),
|
||||
'recheckwatch': ('recheckwatch', 'ci_username'),
|
||||
}
|
||||
for k, v in cfg_map.items():
|
||||
try:
|
||||
self.gerrit_host = config.get('gerrit',
|
||||
'host',
|
||||
fallback=GERRIT_HOST)
|
||||
except TypeError:
|
||||
self.gerrit_host = config.get('gerrit',
|
||||
'host',
|
||||
GERRIT_HOST)
|
||||
self.gerrit_host_key = config.get('gerrit', 'key')
|
||||
|
||||
if config.has_section('ircbot'):
|
||||
self.pid_fn = os.path.expanduser(config.get('ircbot',
|
||||
'pidfile'))
|
||||
self.ircbot_nick = config.get('ircbot', 'nick')
|
||||
self.ircbot_pass = config.get('ircbot', 'pass')
|
||||
self.ircbot_server = config.get('ircbot', 'server')
|
||||
self.ircbot_port = config.getint('ircbot', 'port')
|
||||
self.ircbot_server_password = config.get('ircbot',
|
||||
'server_password')
|
||||
self.ircbot_channel_config = config.get('ircbot',
|
||||
'channel_config')
|
||||
if config.has_option('ircbot', 'log_config'):
|
||||
self.irc_log_config = config.get('ircbot', 'log_config')
|
||||
if hasattr(self, k) and getattr(self, k) is None:
|
||||
setattr(self, k, config.get(v[0], v[1]))
|
||||
except (
|
||||
configparser.NoOptionError,
|
||||
configparser.NoSectionError):
|
||||
pass
|
||||
|
@ -30,7 +30,7 @@ def _set_fake_config(fake_config):
|
||||
fake_config.add_section('ircbot')
|
||||
fake_config.add_section('gerrit')
|
||||
# Set fake ircbot config
|
||||
fake_config.set('ircbot', 'pidfile', er_conf.PID_FN)
|
||||
fake_config.set('ircbot', 'pidfile', er_conf.DEFAULTS['PID_FN'])
|
||||
fake_config.set('ircbot', 'nick', 'Fake_User')
|
||||
fake_config.set('ircbot', 'pass', '')
|
||||
fake_config.set('ircbot', 'server', 'irc.fake.net')
|
||||
@ -47,6 +47,7 @@ def _set_fake_config(fake_config):
|
||||
# NOTE(mtreinish) Using unittest here because testtools TestCase.assertRaises
|
||||
# doesn't support using it as a context manager
|
||||
class TestBot(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestBot, self).setUp()
|
||||
self.fake_config = configparser.ConfigParser(
|
||||
|
Loading…
x
Reference in New Issue
Block a user