diff --git a/pillar_tool/routers/pillar.py b/pillar_tool/routers/pillar.py index ecd22e7..7b8cca7 100644 --- a/pillar_tool/routers/pillar.py +++ b/pillar_tool/routers/pillar.py @@ -12,7 +12,7 @@ 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 from pillar_tool.util.pillar_utilities import merge -from pillar_tool.util.validation import validate_state_name +from pillar_tool.util.validation import validate_state_name, validate_fqdn router = APIRouter( prefix="/pillar", @@ -57,13 +57,29 @@ def pillar_get(req: Request, fqdn: str): -@router.post("/{fqdn}") -def pillar_create(req: Request, fqdn: str, params: PillarParams): - # TODO: implement +@router.post("/{name}") +def pillar_create(req: Request, name: str, params: PillarParams): db = req.state.db + # ensure that value and type have been set in the request parameters + if params.type is None or params.value is None: -@router.delete("/{fqdn}") -def pillar_delete(req: Request, fqdn: str): + + target_stmt = select(Host).where(Host.name == name) + result = db.execute(target_stmt).fetchall() + + if len(result) == 0: + return JSONResponse(status_code=404, content={}) + + # this should be enforced by the database + assert len(result) == 1 + target: Host = result[0][0] + + + + + +@router.delete("/{name}") +def pillar_delete(req: Request, name: str): # TODO: implement db = req.state.db