69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
"""Configuration loader and defaults for hbd."""
|
|
|
|
import logging
|
|
import os
|
|
|
|
try:
|
|
import yaml
|
|
except Exception:
|
|
yaml = None
|
|
|
|
DEFAULTS = {
|
|
"hb_port": 50003,
|
|
"hbd_port": 50004,
|
|
"hbd_host": "",
|
|
"pickfile": "/tmp/hb.pick",
|
|
"logfile": "/var/log/heartbeat.log",
|
|
"logfmt": "text",
|
|
"pushsrv": "pushover",
|
|
"pushover_token": "",
|
|
"pushover_user": "",
|
|
"interval": 20,
|
|
"grace": 2,
|
|
"dyndomains": ["wrede.org"],
|
|
"watchhosts": [],
|
|
"dyndnshosts": [],
|
|
"drophosts": [],
|
|
"nsupdate_bin": "/usr/bin/nsupdate",
|
|
"foreground": False,
|
|
"verbose": False,
|
|
"debug": 0,
|
|
"smtpserver": "smtp.fastmail.com",
|
|
"smtpuser": "andreas@wrede.ca",
|
|
"smtppassword": "pvtvefyp5gbhnch2",
|
|
"smtpport": 587,
|
|
"toemail": ["aew.hbd.notify@wrede.ca"],
|
|
"fromemail": "aew.hbd@wrede.ca",
|
|
"ws_port": 50005,
|
|
"wss_port": None,
|
|
"cert_path": "/usr/local/etc/ssl/",
|
|
"wss_pem": "fullchain.pem",
|
|
"wss_key": "privkey.pem",
|
|
}
|
|
|
|
|
|
def load_config(path=None):
|
|
"""Load configuration from a YAML file and merge with defaults.
|
|
|
|
If YAML is not available or the file does not exist, defaults are returned.
|
|
"""
|
|
cfg = DEFAULTS.copy()
|
|
if not path:
|
|
# default path (~/.hb.yaml)
|
|
path = os.path.join(os.path.expanduser("~"), ".hb.yaml")
|
|
|
|
if os.path.exists(path):
|
|
if yaml:
|
|
with open(path) as fh:
|
|
data = yaml.safe_load(fh)
|
|
# only keep known keys
|
|
for k, v in data.items():
|
|
if k in cfg:
|
|
cfg[k] = v
|
|
else:
|
|
logging.warning("unknown config key %s in %s", k, path)
|
|
else:
|
|
# yaml not installed: do not attempt to parse; user must ensure defaults
|
|
pass
|
|
return cfg
|