dynamic-infra-tooling/infra_cli/config.py

42 lines
1.3 KiB
Python
Raw Normal View History

import os
import yaml
DEFAULT_CONFIG_PATH = os.path.expanduser("~/.config/loopaware/infra-cli.yaml")
class Config:
def __init__(self, config_path=None):
self.path = config_path or os.environ.get("INFRA_CONFIG") or DEFAULT_CONFIG_PATH
self.data = self._load()
def _load(self):
data = {}
if os.path.exists(self.path):
with open(self.path, 'r') as f:
data = yaml.safe_load(f) or {}
elif os.path.exists("config.yaml"):
self.path = os.path.abspath("config.yaml")
with open(self.path, 'r') as f:
data = yaml.safe_load(f) or {}
return data
def get(self, key, default=None):
# Support ENV overrides: INFRA_PROXMOX_USER -> proxmox.user
env_key = "INFRA_" + key.upper().replace('.', '_')
if env_key in os.environ:
return os.environ[env_key]
parts = key.split('.')
val = self.data
for part in parts:
if isinstance(val, dict) and part in val:
val = val[part]
else:
return default
return val
def get_node(self, node_name):
nodes = self.get('proxmox.nodes', {})
if not nodes:
return None
return nodes.get(node_name)