From e2f8447f0ebc4976fe508ad57c1c9b95ff22b15b Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Wed, 22 Jan 2020 11:14:08 +0100 Subject: [PATCH] move to env var for configuration --- steckie.py | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/steckie.py b/steckie.py index 5367aa0..c5c2ce4 100755 --- a/steckie.py +++ b/steckie.py @@ -16,12 +16,12 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import os import sys import yaml import json import logging import argparse -from datetime import datetime import urllib.request from influxdb import InfluxDBClient from apscheduler.schedulers.blocking import BlockingScheduler @@ -30,18 +30,52 @@ from apscheduler.schedulers.blocking import BlockingScheduler CONFIGFILE = "/opt/steckie/config.yml" CMD_SENSOR = "cm?cmnd=Status%208" +CFG_DEFAULTS = { + "STECKIE_ITVL": 5, + "INFLUXDB_PORT": 8086, +} + +CFG_NEEDED = { + "INFLUXDB_HOST": "hostname", + "INFLUXDB_DB": "database_name", + "INFLUXDB_USER": "username", + "INFLUXDB_USER_PASSWORD": "SuperSecure", +} + +CFG_VAR = { + "name": r'STECKIE_DEV_\d+_NAME', + "url": r'STECKIE_DEV_\d+_URL', +} + class Steckie: - def __init__(self, cfgfile): + def __init__(self, env_file): self.cfg = dict() + env = os.environ + + print("Env file: {}".format(env_file)) # read configuration - try: - with open(cfgfile, 'r', encoding="utf-8") as f: - self.cfg.update(yaml.load(f, Loader=yaml.BaseLoader)) - except: - logging.error("unable to read config file '{}'".format(cfgfile)) - sys.exit(1) + if env_file: + env = self.read_env(env_file) + for val in CFG_DEFAULTS: + self.cfg[val] = env[val] if val in env else CFG_DEFAULTS[val] + for val in CFG_NEEDED: + if val in env: + self.cfg[val] = env[val] + else: + logging.error("unable to read {} fron env".format(val)) + sys.exit(1) + + if cfgfile: + try: + with open(cfgfile, 'r', encoding="utf-8") as f: + self.cfg.update(yaml.load(f, Loader=yaml.BaseLoader)) + except: + logging.error("unable to read config file '{}'".format(cfgfile)) + sys.exit(1) + + self.scheduler = BlockingScheduler() self.db = InfluxDBClient(host=self.cfg['db']['host'], @@ -94,12 +128,12 @@ class Steckie: def main(args): logging.basicConfig(format='%(asctime)s %(message)s', level=logging.WARNING) - steckie = Steckie(args.cfgfile) + steckie = Steckie(args.env_file) steckie.run() if __name__ == "__main__": p = argparse.ArgumentParser() - p.add_argument("cfgfile", default=CONFIGFILE, nargs='?', help="output dump") + p.add_argument("env_file", default=None, nargs="?", help="output dump") args = p.parse_args() main(args)