78 lines
3.2 KiB
Diff
78 lines
3.2 KiB
Diff
From c10d1ff7ad3b74886911b719f50f4775120db789 Mon Sep 17 00:00:00 2001
|
||
From: rearcher <123781007@qq.com>
|
||
Date: Thu, 14 Dec 2023 19:58:19 +0800
|
||
Subject: [PATCH] add a new query method based on host name for the host list query interface.
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
---
|
||
...6\216\245\345\217\243\346\226\207\346\241\243.yaml" | 4 ++++
|
||
zeus/database/proxy/host.py | 10 +++++++++-
|
||
zeus/function/verify/host.py | 1 +
|
||
3 files changed, 14 insertions(+), 1 deletion(-)
|
||
|
||
diff --git "a/doc/design/aops-zeus\346\216\245\345\217\243\346\226\207\346\241\243.yaml" "b/doc/design/aops-zeus\346\216\245\345\217\243\346\226\207\346\241\243.yaml"
|
||
index efadcc6..87dfe68 100644
|
||
--- "a/doc/design/aops-zeus\346\216\245\345\217\243\346\226\207\346\241\243.yaml"
|
||
+++ "b/doc/design/aops-zeus\346\216\245\345\217\243\346\226\207\346\241\243.yaml"
|
||
@@ -998,6 +998,10 @@ definitions:
|
||
type: string
|
||
description: 获取指定主机组里的主机信息,为空表示所有
|
||
example: '[]'
|
||
+ search_key:
|
||
+ type: string
|
||
+ description: 输入主机名称或主机host_ip获取指定主机信息
|
||
+ example: search_key
|
||
management:
|
||
type: boolean
|
||
description: 管理节点or监控节点,不传表示所有
|
||
diff --git a/zeus/database/proxy/host.py b/zeus/database/proxy/host.py
|
||
index 477c482..441ef21 100644
|
||
--- a/zeus/database/proxy/host.py
|
||
+++ b/zeus/database/proxy/host.py
|
||
@@ -19,7 +19,7 @@ import math
|
||
from typing import Dict, List, Tuple
|
||
|
||
import sqlalchemy
|
||
-from sqlalchemy import func
|
||
+from sqlalchemy import func, or_
|
||
from sqlalchemy.sql.expression import asc, desc
|
||
from sqlalchemy.orm.collections import InstrumentedList
|
||
|
||
@@ -210,11 +210,19 @@ class HostProxy(MysqlProxy):
|
||
username = data['username']
|
||
host_group_list = data.get('host_group_list')
|
||
management = data.get('management')
|
||
+ search_key = data.get('search_key')
|
||
filters = {Host.user == username}
|
||
if host_group_list:
|
||
filters.add(Host.host_group_name.in_(host_group_list))
|
||
if management is not None:
|
||
filters.add(Host.management == management)
|
||
+ if search_key:
|
||
+ filters.add(
|
||
+ or_(
|
||
+ Host.host_name.like("%" + search_key + "%"),
|
||
+ Host.host_ip.like("%" + search_key + "%"),
|
||
+ )
|
||
+ )
|
||
if data.get('status'):
|
||
filters.add(Host.status.in_(data.get('status')))
|
||
|
||
diff --git a/zeus/function/verify/host.py b/zeus/function/verify/host.py
|
||
index f746968..3f8bab9 100644
|
||
--- a/zeus/function/verify/host.py
|
||
+++ b/zeus/function/verify/host.py
|
||
@@ -52,6 +52,7 @@ class GetHostSchema(Schema):
|
||
"""
|
||
|
||
host_group_list = fields.List(fields.String(), required=True)
|
||
+ search_key = fields.String(required=False, validate=lambda s: 50 > len(s) > 0)
|
||
management = fields.Boolean(required=False)
|
||
status = fields.List(fields.Integer(validate=lambda s: s >= 0), required=False)
|
||
sort = fields.String(required=False, validate=validate.OneOf(["host_name", "host_group_name", ""]))
|
||
--
|
||
2.33.0
|
||
|