diff --git a/pillar_tool/__pycache__/__init__.cpython-313.pyc b/pillar_tool/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 272a76d..0000000 Binary files a/pillar_tool/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/pillar_tool/middleware/__pycache__/__init__.cpython-313.pyc b/pillar_tool/middleware/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 305b1e4..0000000 Binary files a/pillar_tool/middleware/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/pillar_tool/middleware/__pycache__/basicauth_backend.cpython-313.pyc b/pillar_tool/middleware/__pycache__/basicauth_backend.cpython-313.pyc deleted file mode 100644 index 7f9c04e..0000000 Binary files a/pillar_tool/middleware/__pycache__/basicauth_backend.cpython-313.pyc and /dev/null differ diff --git a/pillar_tool/routers/pillar.py b/pillar_tool/routers/pillar.py index 8c63271..8286ac3 100644 --- a/pillar_tool/routers/pillar.py +++ b/pillar_tool/routers/pillar.py @@ -11,7 +11,7 @@ from starlette.requests import Request from fastapi import APIRouter, Depends from starlette.responses import JSONResponse -from pillar_tool.db import Host, Pillar +from pillar_tool.db import Host, Pillar, TopFile from pillar_tool.db.models.top_data import State, StateAssignment from pillar_tool.db.queries.pillar_queries import get_pillar_for_target from pillar_tool.schemas import PillarParams, get_model_from_query @@ -83,9 +83,20 @@ def pillar_get(req: Request, target: str) -> JSONResponse: path.reverse() + # create 'virtual' pillar for states + stmt_states = select(State).join(TopFile, TopFile.state_id == State.id).where(TopFile.host_id == host.id) + states_list: list[str] = [ x[0].name for x in db.execute(stmt_states).fetchall() ] + + # create path name + hostgroup_name = '/'.join(x.name for x in path[:-1]) + print("[DEBUG] pillar_get: resolved host hierarchy with {} hosts: {}".format(len(path), [h.name for h in path])) out = merge([get_pillar_for_target(db, host.id) for host in path]) # type: ignore + out.update({ + "states": states_list, + "hostgroup": hostgroup_name + }) print("[DEBUG] pillar_get: merged pillar data contains {} top-level key(s)".format(len(out))) return JSONResponse(status_code=200, content=out)