snapshot
This commit is contained in:
parent
fc670efb14
commit
6cb3a3785b
@ -45,5 +45,6 @@ def create_host(db: Session, fqdn: str, parent: str | None) -> Host:
|
|||||||
raise HTTPException(status_code=500, detail="Invalid state of database")
|
raise HTTPException(status_code=500, detail="Invalid state of database")
|
||||||
|
|
||||||
|
|
||||||
def delete_host(db: Session, fqdn: str):
|
def delete_host(db: Session, path: list[str]) -> str | None:
|
||||||
|
|
||||||
pass
|
pass
|
||||||
@ -108,6 +108,23 @@ async def hostgroup_list(request: Request):
|
|||||||
|
|
||||||
@app.post("/host/{fqdn}")
|
@app.post("/host/{fqdn}")
|
||||||
async def host_add(request: Request, fqdn: str, params: HostCreateParams):
|
async def host_add(request: Request, fqdn: str, params: HostCreateParams):
|
||||||
|
"""
|
||||||
|
Creates a hierarchical host structure based on the provided FQDN path.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The HTTP request containing database connection and other metadata.
|
||||||
|
fqdn: Fully Qualified Domain Name in dot-separated format (e.g., "a/b/c").
|
||||||
|
params: Host creation parameters including optional parent reference.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
JSON response with:
|
||||||
|
- message: Confirmation of host creation
|
||||||
|
- host: The final created host object
|
||||||
|
- path: Full hierarchical path if applicable
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
HTTPException(400): If the provided FQDN is invalid or malformed.
|
||||||
|
"""
|
||||||
# Validate and split FQDN into hierarchical labels (e.g., "a/b/c" -> ["a", "b", "c"])
|
# Validate and split FQDN into hierarchical labels (e.g., "a/b/c" -> ["a", "b", "c"])
|
||||||
labels = validate_and_split_path_and_domain_name(fqdn)
|
labels = validate_and_split_path_and_domain_name(fqdn)
|
||||||
if labels is None:
|
if labels is None:
|
||||||
@ -144,8 +161,22 @@ async def host_add(request: Request, fqdn: str, params: HostCreateParams):
|
|||||||
|
|
||||||
@app.delete("/host/{fqdn}")
|
@app.delete("/host/{fqdn}")
|
||||||
async def host_delete(request: Request, fqdn: str):
|
async def host_delete(request: Request, fqdn: str):
|
||||||
delete_host(request.state.db, fqdn)
|
# Validate and split FQDN into hierarchical labels (e.g., "a/b/c" -> ["a", "b", "c"])
|
||||||
return JSONResponse({})
|
labels = validate_and_split_path_and_domain_name(fqdn)
|
||||||
|
if labels is None:
|
||||||
|
raise HTTPException(status_code=400, detail="Invalid Path provided")
|
||||||
|
|
||||||
|
error_msg: str | None = delete_host(request.state.db, labels)
|
||||||
|
if error_msg is not None:
|
||||||
|
return JSONResponse({
|
||||||
|
'message': "Failed to delete host",
|
||||||
|
'details': error_msg
|
||||||
|
}, status_code=400)
|
||||||
|
else:
|
||||||
|
return JSONResponse({
|
||||||
|
'message': "Host deleted",
|
||||||
|
'path': fqdn
|
||||||
|
})
|
||||||
|
|
||||||
@app.get("/top/{fqdn}")
|
@app.get("/top/{fqdn}")
|
||||||
async def host_top(request: Request, fqdn: str):
|
async def host_top(request: Request, fqdn: str):
|
||||||
|
|||||||
@ -76,3 +76,8 @@ def host_create(fqdn: str, parent: str | None):
|
|||||||
|
|
||||||
click.echo(f"Host '{fqdn}' created!")
|
click.echo(f"Host '{fqdn}' created!")
|
||||||
|
|
||||||
|
|
||||||
|
@host.command("delete")
|
||||||
|
@click.argument("full_path")
|
||||||
|
def host_delete(full_path: str):
|
||||||
|
click.confirm(f"Are you sure you want to delete")
|
||||||
@ -2,6 +2,7 @@ import re
|
|||||||
|
|
||||||
|
|
||||||
DOMAIN_NAME_REGEX = r'^[a-zA-Z0-9._-]+$' # could be a FQDN, but also just a name
|
DOMAIN_NAME_REGEX = r'^[a-zA-Z0-9._-]+$' # could be a FQDN, but also just a name
|
||||||
|
FQDN_REGEX = r'^([a-zA-Z0-9.-]+\.)+[a-zA-Z]{2,}$'
|
||||||
|
|
||||||
|
|
||||||
def validate_and_split_path_and_domain_name(path_or_dn: str) -> list[str] | None:
|
def validate_and_split_path_and_domain_name(path_or_dn: str) -> list[str] | None:
|
||||||
@ -31,3 +32,5 @@ def validate_and_split_path_and_domain_name(path_or_dn: str) -> list[str] | None
|
|||||||
# Return the list of validated fragments or None if any failed validation
|
# Return the list of validated fragments or None if any failed validation
|
||||||
# NOTE: validated_fragments could be falsy if input was empty or only slashes
|
# NOTE: validated_fragments could be falsy if input was empty or only slashes
|
||||||
return validated_fragments if validated_fragments else None
|
return validated_fragments if validated_fragments else None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user