import os import json import logging import yaml from pathlib import Path from dotenv import load_dotenv from src.database import setup_db_conn from src.schema import ConfigSchema from typing import List from pydantic import TypeAdapter def initialize_config(): load_dotenv() log = logging.getLogger("uvicorn") ENV_INVENTORYPATH = os.getenv("cluster_inventory_path") ENV_REDISHOST = os.getenv("redis_host") ENV_REDISPORT = os.getenv("redis_port") log.info(f"Found Cluster Inventory file at: {ENV_INVENTORYPATH}") if not ENV_INVENTORYPATH or not Path(ENV_INVENTORYPATH).is_file(): print(f"FATAL: Inventory file {ENV_INVENTORYPATH} is missing or not a file.") return False try: with open(ENV_INVENTORYPATH, "r") as f: inv = yaml.safe_load(f) inventory = json.dumps(inv) except Exception as e: print(f"FATAL: Cannot read inventory file {ENV_INVENTORYPATH}. Err: {e}") return False print(f"[INFO] Importing configuration to DB...") try: GLOBAL_INVENTORY_VALID = TypeAdapter(List[ConfigSchema]).validate_python(inv) redis_conn = setup_db_conn(ENV_REDISHOST, ENV_REDISPORT) redis_conn.hset("cluster_inventory", mapping={"inventory": inventory}) redis_conn.close() log.info("Configuration has been loaded.") return True except Exception as e: print(f"FATAL: Redis DB error: {e}") return False