From f277cf088e6bc54a585ab53979c747fe409e293f Mon Sep 17 00:00:00 2001 From: pycook Date: Mon, 11 Nov 2024 18:56:09 +0800 Subject: [PATCH] fix(api): ipam assign address --- cmdb-api/api/lib/cmdb/ipam/address.py | 4 ++-- cmdb-api/api/lib/cmdb/ipam/subnet.py | 6 +++--- cmdb-api/api/lib/mixin.py | 19 +++++++++++++++---- cmdb-api/api/models/cmdb.py | 1 + 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/cmdb-api/api/lib/cmdb/ipam/address.py b/cmdb-api/api/lib/cmdb/ipam/address.py index 6fda8f5..1ebb82b 100644 --- a/cmdb-api/api/lib/cmdb/ipam/address.py +++ b/cmdb-api/api/lib/cmdb/ipam/address.py @@ -106,8 +106,8 @@ class IpAddressManager(object): ci_id = ip2ci[ip]['_id'] CIManager().update(ci_id, _sync=True, **kwargs) if IPAddressBuiltinAttributes.ASSIGN_STATUS in kwargs and ( - kwargs[IPAddressBuiltinAttributes.ASSIGN_STATUS] != - ip2ci[ip].get(IPAddressBuiltinAttributes.ASSIGN_STATUS)): + (kwargs[IPAddressBuiltinAttributes.ASSIGN_STATUS] or 2) != + (ip2ci[ip].get(IPAddressBuiltinAttributes.ASSIGN_STATUS) or 2)): status_change_num += 1 ci_ids.append(ci_id) diff --git a/cmdb-api/api/lib/cmdb/ipam/subnet.py b/cmdb-api/api/lib/cmdb/ipam/subnet.py index 3a58aeb..cd40750 100644 --- a/cmdb-api/api/lib/cmdb/ipam/subnet.py +++ b/cmdb-api/api/lib/cmdb/ipam/subnet.py @@ -265,9 +265,9 @@ class SubnetManager(object): return _id - def delete(self, _id): - if CIRelation.get_by(only_query=True).join(CI, CI.id == CIRelation.second_ci_id).filter( - CIRelation.first_ci_id == _id).filter(CI.type_id == self.type_id).first(): + @classmethod + def delete(cls, _id): + if CIRelation.get_by(only_query=True).filter(CIRelation.first_ci_id == _id).first(): return abort(400, ErrFormat.ipam_subnet_cannot_delete) existed = IPAMSubnetScan.get_by(ci_id=_id, first=True, to_dict=False) diff --git a/cmdb-api/api/lib/mixin.py b/cmdb-api/api/lib/mixin.py index d2d4abf..ca74a4d 100644 --- a/cmdb-api/api/lib/mixin.py +++ b/cmdb-api/api/lib/mixin.py @@ -1,6 +1,7 @@ # -*- coding:utf-8 -*- +from flask import current_app from sqlalchemy import func from api.extensions import db @@ -32,11 +33,21 @@ class DBMixin(object): for k in kwargs: if hasattr(cls.cls, k): - query = query.filter(getattr(cls.cls, k) == kwargs[k]) - if count_query: - _query = _query.filter(getattr(cls.cls, k) == kwargs[k]) + if isinstance(kwargs[k], list): + query = query.filter(getattr(cls.cls, k).in_(kwargs[k])) + if count_query: + _query = _query.filter(getattr(cls.cls, k).in_(kwargs[k])) + else: + if "*" in str(kwargs[k]): + query = query.filter(getattr(cls.cls, k).ilike(kwargs[k].replace('*', '%'))) + if count_query: + _query = _query.filter(getattr(cls.cls, k).ilike(kwargs[k].replace('*', '%'))) + else: + query = query.filter(getattr(cls.cls, k) == kwargs[k]) + if count_query: + _query = _query.filter(getattr(cls.cls, k) == kwargs[k]) - if reverse: + if reverse in current_app.config.get('BOOL_TRUE'): query = query.order_by(cls.cls.id.desc()) if only_query and not count_query: diff --git a/cmdb-api/api/models/cmdb.py b/cmdb-api/api/models/cmdb.py index 5385dc2..2a9cc63 100644 --- a/cmdb-api/api/models/cmdb.py +++ b/cmdb-api/api/models/cmdb.py @@ -476,6 +476,7 @@ class PreferenceShowAttributes(Model): uid = db.Column(db.Integer, index=True, nullable=False) type_id = db.Column(db.Integer, db.ForeignKey("c_ci_types.id"), nullable=False) attr_id = db.Column(db.Integer, db.ForeignKey("c_attributes.id")) + builtin_attr = db.Column(db.String(256), nullable=True) order = db.Column(db.SmallInteger, default=0) is_fixed = db.Column(db.Boolean, default=False)