diff --git a/app/routers/servers.py b/app/routers/servers.py
index 650d7f1..adcd907 100644
--- a/app/routers/servers.py
+++ b/app/routers/servers.py
@@ -20,6 +20,7 @@ async def servers_list(request: Request, db=Depends(get_db),
domain: str = Query(None), env: str = Query(None),
tier: str = Query(None), etat: str = Query(None),
os: str = Query(None), owner: str = Query(None),
+ zone: str = Query(None),
application: str = Query(None), application_id: int = Query(None),
search: str = Query(None), page: int = Query(1),
sort: str = Query("hostname"), sort_dir: str = Query("asc")):
@@ -28,10 +29,12 @@ async def servers_list(request: Request, db=Depends(get_db),
return RedirectResponse(url="/login")
filters = {"domain": domain, "env": env, "tier": tier, "etat": etat, "os": os,
- "owner": owner, "application": application, "application_id": application_id,
+ "owner": owner, "zone": zone,
+ "application": application, "application_id": application_id,
"search": search}
servers, total = list_servers(db, filters, page, sort=sort, sort_dir=sort_dir)
domains_list, envs_list = get_reference_data(db)
+ zones_list = db.execute(text("SELECT name, is_dmz FROM zones ORDER BY is_dmz DESC, name")).fetchall()
applications_list = db.execute(text("""SELECT application_name, COUNT(*) as c FROM servers
WHERE application_name IS NOT NULL AND application_name != ''
@@ -48,7 +51,7 @@ async def servers_list(request: Request, db=Depends(get_db),
return templates.TemplateResponse("servers.html", {
"request": request, "user": user, "app_name": APP_NAME,
"servers": servers, "total": total, "page": page, "per_page": 50,
- "domains_list": domains_list, "envs_list": envs_list,
+ "domains_list": domains_list, "envs_list": envs_list, "zones_list": zones_list,
"applications_list": applications_list, "filters": filters,
"sort": sort, "sort_dir": sort_dir,
"perms": perms, "can_edit_servers": can_edit_servers,
diff --git a/app/services/server_service.py b/app/services/server_service.py
index f16f2fb..c049148 100644
--- a/app/services/server_service.py
+++ b/app/services/server_service.py
@@ -124,6 +124,11 @@ def list_servers(db, filters, page=1, per_page=50, sort="hostname", sort_dir="as
where.append("s.etat = :etat"); params["etat"] = filters["etat"]
if filters.get("os"):
where.append("s.os_family = :os"); params["os"] = filters["os"]
+ if filters.get("zone"):
+ if filters["zone"] == "__null__":
+ where.append("s.zone_id IS NULL")
+ else:
+ where.append("z.name = :zone"); params["zone"] = filters["zone"]
if filters.get("owner"):
where.append("s.patch_os_owner = :owner"); params["owner"] = filters["owner"]
if filters.get("application_id"):
diff --git a/app/templates/servers.html b/app/templates/servers.html
index 1b2749c..61a7888 100644
--- a/app/templates/servers.html
+++ b/app/templates/servers.html
@@ -44,6 +44,10 @@
+