diff --git a/.gitignore b/.gitignore index a2e766be..5336db70 100644 --- a/.gitignore +++ b/.gitignore @@ -94,5 +94,5 @@ ENV/ .pytest_cache/ # project -settings.yaml +*settings.yaml inventory.yaml diff --git a/.travis.yml b/.travis.yml index 293cf2f2..058c0533 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,5 +4,5 @@ python: - "3.8" install: pip install . script: - - mv settings.yaml.example settings.yaml + - mv broker_settings.yaml.example broker_settings.yaml - pytest -v \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 728c7a43..bcbff7c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,9 +5,10 @@ RUN dnf -y install make cmake gcc-c++ zlib-devel \ openssl-devel git python3-pip python3-devel \ && dnf clean all WORKDIR /root/broker +ENV BROKER_DIRECTORY=/root/broker/ COPY . /root/broker/ RUN pip install . -RUN cp settings.yaml.example settings.yaml +RUN cp broker_settings.yaml.example broker_settings.yaml ENTRYPOINT ["broker"] diff --git a/HISTORY.rst b/HISTORY.rst index 33a3b42f..36ccc1f8 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -2,6 +2,13 @@ History ======= +0.0.10 (2020-06-29) +================== + ++ Updated broker to be compatible with dynaconf 3.0.0 ++ Added the ability to specify a BROKER_DIRECTORY envrionment variable ++ Changed settings.yaml to broker_settings.yaml + 0.0.9 (2020-06-19) ================== diff --git a/README.md b/README.md index 72cc7b9c..932031cf 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,13 @@ Broker is a tool designed to provide a common interface between one or many serv dnf install cmake cd pip install . -cp setting.yaml.example settings.yaml +cp broker_settings.yaml.example broker_settings.yaml ``` -Then edit the settings.yaml file +Then edit the broker_settings.yaml file + +Broker can also be ran outside of its base directory. In order to do so, specify the directory broker's files are in with the +`BROKER_DIRECTORY` envronment variable. +```BROKER_DIRECTORY=/home/jake/Programming/broker/ broker inventory``` # Usage **Checking out a VM** diff --git a/broker/helpers.py b/broker/helpers.py index 56aab961..60004444 100644 --- a/broker/helpers.py +++ b/broker/helpers.py @@ -1,9 +1,10 @@ """Miscellaneous helpers live here""" +import os from collections import UserDict from collections.abc import MutableMapping from copy import deepcopy from pathlib import Path -from dynaconf import settings +from broker import settings import yaml @@ -73,9 +74,9 @@ def resolve_nick(nick): :return: a dictionary mapping argument names and values """ - nick_names = settings.get("NICKS", {}) + nick_names = settings.settings.get("NICKS", {}) if nick in nick_names: - return settings.NICKS[nick].to_dict() + return settings.settings.NICKS[nick].to_dict() def load_inventory(): @@ -83,7 +84,7 @@ def load_inventory(): :return: list of dictionaries """ - inventory_file = Path(settings.INVENTORY_FILE) + inventory_file = settings.BROKER_DIRECTORY.joinpath(settings.settings.INVENTORY_FILE) if not inventory_file.exists(): inv_data = [] else: @@ -101,7 +102,7 @@ def update_inventory(add=None, remove=None): :return: no return value """ - inventory_file = Path(settings.INVENTORY_FILE) + inventory_file = settings.BROKER_DIRECTORY.joinpath(settings.settings.INVENTORY_FILE) if add and not isinstance(add, list): add = [add] if remove and not isinstance(remove, list): diff --git a/broker/hosts.py b/broker/hosts.py index 8d55fd55..ae916993 100644 --- a/broker/hosts.py +++ b/broker/hosts.py @@ -1,5 +1,5 @@ # from functools import cached_property -from dynaconf import settings +from broker.settings import settings from broker import session class Host: diff --git a/broker/logger.py b/broker/logger.py index fbc6a375..b87fcc75 100644 --- a/broker/logger.py +++ b/broker/logger.py @@ -1,7 +1,10 @@ # -*- encoding: utf-8 -*- """Module handling internal and dependency logging.""" +import os import logging +from pathlib import Path import logzero +from broker.settings import BROKER_DIRECTORY def setup_logzero(level="info", path="logs/broker.log"): @@ -15,6 +18,7 @@ def setup_logzero(level="info", path="logs/broker.log"): formatter = logzero.LogFormatter(fmt=debug_fmt if log_level is logging.DEBUG else log_fmt) logzero.setup_default_logger(formatter=formatter) logzero.loglevel(log_level) + path = str(BROKER_DIRECTORY.joinpath(path)) logzero.logfile( path, loglevel=log_level, maxBytes=1e9, backupCount=3, formatter=formatter ) diff --git a/broker/providers/ansible_tower.py b/broker/providers/ansible_tower.py index 1d53bbd6..795561bf 100644 --- a/broker/providers/ansible_tower.py +++ b/broker/providers/ansible_tower.py @@ -1,6 +1,6 @@ import inspect import json -from dynaconf import settings +from broker.settings import settings from logzero import logger try: diff --git a/broker/providers/test_provider.py b/broker/providers/test_provider.py index 37da86e8..4f55250b 100644 --- a/broker/providers/test_provider.py +++ b/broker/providers/test_provider.py @@ -1,5 +1,5 @@ import inspect -from dynaconf import settings +from broker.settings import settings from logzero import logger from broker.providers import Provider diff --git a/broker/settings.py b/broker/settings.py new file mode 100644 index 00000000..aacdeb94 --- /dev/null +++ b/broker/settings.py @@ -0,0 +1,13 @@ +import os +from pathlib import Path +from dynaconf import Dynaconf + +settings_file = "broker_settings.yaml" +BROKER_DIRECTORY = Path() + +if "BROKER_DIRECTORY" in os.environ: + envar_location = Path(os.environ["BROKER_DIRECTORY"]) + if envar_location.is_dir(): + BROKER_DIRECTORY = envar_location + +settings = Dynaconf(settings_file=str(BROKER_DIRECTORY.joinpath("broker_settings.yaml"))) diff --git a/broker_settings.yaml.example b/broker_settings.yaml.example new file mode 100644 index 00000000..d40a2dfd --- /dev/null +++ b/broker_settings.yaml.example @@ -0,0 +1,26 @@ +# Broker settings +debug: False +inventory_file: "inventory.yaml" +# Host Settings +host_username: "root" +host_password: "" +# Provider settings +AnsibleTower: + base_url: "https:///" + username: "" + password: "" + release_workflow: "remove-vm" +TestProvider: + config_value: "something" +# You can set a nickname as a shortcut for arguments +nicks: + rhel7: + workflow: "deploy-base-rhel" + rhel_version: "7.7" + provider: "RHEV" + notes: "Requested by broker" + test_nick: + test_action: "fake" + arg1: "abc" + arg2: 123 + arg3: True \ No newline at end of file diff --git a/settings.yaml.example b/settings.yaml.example deleted file mode 100644 index c53443fe..00000000 --- a/settings.yaml.example +++ /dev/null @@ -1,27 +0,0 @@ -default: - # Broker settings - debug: False - inventory_file: "inventory.yaml" - # Host Settings - host_username: "root" - host_password: "" - # Provider settings - AnsibleTower: - base_url: "https:///" - username: "" - password: "" - release_workflow: "remove-vm" - TestProvider: - config_value: "something" - # You can set a nickname as a shortcut for arguments - nicks: - rhel7: - workflow: "deploy-base-rhel" - rhel_version: "7.7" - provider: "RHEV" - notes: "Requested by broker" - test_nick: - test_action: "fake" - arg1: "abc" - arg2: 123 - arg3: True \ No newline at end of file diff --git a/setup.py b/setup.py index fe5d431a..29e73475 100644 --- a/setup.py +++ b/setup.py @@ -12,11 +12,11 @@ with open("HISTORY.rst") as history_file: history = history_file.read() -requirements = [AWXKIT, "click", "dynaconf[yaml]", "logzero", "pyyaml", "ssh2-python"] +requirements = [AWXKIT, "click", "dynaconf", "logzero", "pyyaml", "ssh2-python"] setup( name="broker", - version="0.0.9", + version="0.0.10", description="The infrastructure middleman.", long_description=readme + "\n\n" + history, author="Jacob J Callahan",