移除旧模型、去除旧的模型依赖

This commit is contained in:
chenzuoqing 2021-12-27 19:43:32 +08:00
parent f9d08d0125
commit 065aa9d34c
7 changed files with 34 additions and 262 deletions

View File

@ -5,7 +5,7 @@ from flask import request
from flask_restful import reqparse
from models.asset import fields as assetField
from models.asset import models as assetModel
from models.asset import host as assetModel
from common.views import ListCreateViewSet, DetailViewSet
from common.permission import session_or_token_required

View File

@ -3,7 +3,7 @@ import datetime
from flask_restful import Resource, reqparse, marshal, fields as F
from models.asset.models import Host
from models.asset.host import Host
from models.asset.fields import HostFields
from models.project import fields
from models.project.models import Project, Channel, Server, Version

View File

@ -4,7 +4,7 @@ from flask import request
from flask_restful import inputs
from models.project import fields
from models.asset import models as assetModel
from models.asset import host as assetModel
from models.project.models import Project, Channel, Server
from common.views import ListMixin, CreateMixin, ListCreateViewSet, DetailViewSet
from common.permission import session_or_token_required

View File

@ -26,82 +26,3 @@ HostSimpleFields = {
"public_ip": fields.String,
"private_ip": fields.String,
}
DatabaseServerFields = {
"id": fields.String,
"name": fields.String,
"domain": fields.String,
"host": fields.String,
"manage": fields.String,
"data": fields.Raw,
"tags": fields.List(fields.String),
"labels": fields.Raw,
}
databaseDetailFields = {
"id": "",
"name": fields.String,
"domain": fields.String,
"host": fields.String,
"manage": fields.String,
"data": fields.Raw,
"tags": fields.List(fields.String),
"labels": fields.Raw,
}
DatabaseFields = {
"id": fields.String,
"name": fields.String,
"username": fields.String,
"password": fields.String,
"data": fields.Raw,
"tags": fields.List(fields.String),
"labels": fields.Raw,
}
MySQLInstanceFields = {
"port": fields.Integer,
"username": fields.String,
"password": fields.String,
"storage": fields.Integer,
"memory": fields.Integer,
"core": fields.Integer,
"databases": fields.List(fields.Nested(DatabaseFields))
}
# 合并 DatabaseServerFields
MySQLInstanceFields.update(DatabaseServerFields)
RedisInstanceFields = {
"port": fields.Integer,
"memory": fields.Integer,
"replicas": fields.Integer,
"password": fields.String,
}
# 合并 DatabaseServerFields
RedisInstanceFields.update(DatabaseServerFields)
MiddlewareFields = {
"id": fields.String,
"host": fields.String,
"manage": fields.String,
"data": fields.Raw,
"tags": fields.List(fields.String),
"labels": fields.Raw,
}
NginxInstanceFields = {
"port": fields.Integer,
"url": fields.String,
}
NginxInstanceFields.update(MiddlewareFields)
# CDN 序列化字段
CDNFields = {
"id": fields.String,
"domain": fields.String,
"data": fields.Raw,
"manage": fields.String,
"tags": fields.List(fields.String),
"labels": fields.Raw,
}

30
src/models/asset/host.py Normal file
View File

@ -0,0 +1,30 @@
from bson import ObjectId
import mongoengine as mongo
from common.document import DocumentBase
from common.validator import is_ipaddr, is_hex_string
class Host(DocumentBase):
# STATUS = {
# "no": ""
# }
public_ip = mongo.StringField(max_length=64, required=True, unique=True, validation=is_ipaddr)
private_ip = mongo.StringField(max_length=64, default="")
minion_id = mongo.StringField(max_length=64, default="") # 需要唯一,先留空
weights = mongo.IntField(default=40)
# status = mongo.StringField()
# spec = mongo.EmbeddedDocumentField(Spec)
cpu_num = mongo.IntField(default=1) # cpu物理个数
cpu_core = mongo.IntField(default=1) # 每个cpu的核心数
memory = mongo.IntField(default=0) # 内存大小单位GB
data = mongo.DictField(default=dict)
# 标记和标签
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)
created = mongo.DateTimeField()

View File

@ -1,109 +0,0 @@
from bson import ObjectId
import mongoengine as mongo
from common.document import DocumentBase
from common.validator import is_ipaddr, is_hex_string
class Host(DocumentBase):
# STATUS = {
# "no": ""
# }
public_ip = mongo.StringField(max_length=64, required=True, unique=True, validation=is_ipaddr)
private_ip = mongo.StringField(max_length=64, default="")
minion_id = mongo.StringField(max_length=64, default="") # 需要唯一,先留空
weights = mongo.IntField(default=40)
# status = mongo.StringField()
# spec = mongo.EmbeddedDocumentField(Spec)
cpu_num = mongo.IntField(default=1) # cpu物理个数
cpu_core = mongo.IntField(default=1) # 每个cpu的核心数
memory = mongo.IntField(default=0) # 内存大小单位GB
data = mongo.DictField(default=dict)
# 标记和标签
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)
created = mongo.DateTimeField()
class DatabaseServer(DocumentBase):
"""数据库服务器实例包括mysql、redis、mongodb"""
meta = {'allow_inheritance': True}
name = mongo.StringField(required=True)
domain = mongo.StringField(required=False) # 域名连接的地址
host = mongo.StringField(required=True) # 内网连接地址
# 管理者,预留
manage = mongo.StringField(max_length=128, required=True)
data = mongo.DictField(default=dict)
# 标记和标签
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)
class Database(mongo.EmbeddedDocument):
"""数据库对象的结构描述,一个数据库实例下包含多个数据库,并授权不同用户"""
# 为数据库对象生成id非主键
# 查询方式: MySQLInstance.objects.filter(databases__id='61adfcd5726440e0eb8b28bc').first()
id = mongo.ObjectIdField(required=True, default=ObjectId)
name = mongo.StringField(required=True)
username = mongo.StringField(default="")
password = mongo.StringField(default="")
data = mongo.DictField(default=dict)
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)
class MySQLInstance(DatabaseServer):
"""MySQL数据库实例"""
# 库名、连接的用户名密码
port = mongo.IntField(default=3306)
username = mongo.StringField(max_length=32, required=True)
password = mongo.StringField(max_length=128, required=True)
# 配置
storage = mongo.IntField(required=True)
memory = mongo.IntField(required=True)
core = mongo.IntField(required=True)
# 实例数据库,包含多个数据库
databases = mongo.EmbeddedDocumentListField(Database)
class RedisInstance(DatabaseServer):
"""Redis数据库实例"""
# 内存大小、副本数、密码
port = mongo.IntField(default=6379)
memory = mongo.IntField(required=True)
replicas = mongo.IntField(required=True, default=0)
password = mongo.StringField(max_length=128, default="")
class Middleware(DocumentBase):
"""中间件"""
meta = {'allow_inheritance': True}
host = mongo.StringField(required=True)
# 管理者,预留
manage = mongo.StringField(max_length=128, required=True)
data = mongo.DictField(default=dict)
# 标记和标签
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)
class NginxInstance(Middleware):
"""nginx服务器"""
port = mongo.IntField(default=80)
url = mongo.StringField(max_length=128, default="/")
class CDN(DocumentBase):
"""cdn域名"""
meta = {'collection': 'cdn'}
domain = mongo.StringField(max_length=256, required=True) # cdn域名
manage = mongo.StringField(max_length=128, default="")
data = mongo.DictField(default=dict)
# 标记和标签
tags = mongo.ListField(mongo.StringField(), default=list) # tags 默认是空列表
labels = mongo.DictField(default=dict)

View File

@ -5,7 +5,7 @@ from settings import common
from common.document import DocumentBase
from common.validator import isalnum, is_hex_string
from models.asset.models import Host, DatabaseServer
from models.asset.host import Host
class Project(DocumentBase):
@ -249,73 +249,3 @@ class Server(DocumentBase):
if hosts:
return queryset.filter(host_id__in=hosts)
return cls.objects.none()
@property
def game_db(self) -> dict:
"""给机器的返回,数据库集合是 DatabaseServer 的子类,可以通过它找到,不管是"""
if self.game_db_id:
instance = DatabaseServer.objects(databases__id=self.game_db_id).first()
if not instance:
return {}
database = instance.databases.filter(id=self.game_db_id).first()
data = dict(database.to_mongo())
if "id" in data:
data.pop("id")
data["host"] = instance.host
data["port"] = instance.port
return data
return {}
@property
def admin_db(self) -> dict:
"""给机器的返回,数据库集合是 DatabaseServer 的子类,可以通过它找到,不管是"""
if self.admin_db_id:
instance = DatabaseServer.objects(databases__id=self.admin_db_id).first()
if not instance:
return {}
database = instance.databases.filter(id=self.admin_db_id).first()
data = dict(database.to_mongo())
if "id" in data:
data.pop("id")
data["host"] = instance.host
data["port"] = instance.port
return data
return {}
@property
def game_database(self) -> dict:
"""给前端的返回,去除密码等敏感信息"""
pop_item = ["id", "username", "password"]
if self.game_db_id:
instance = DatabaseServer.objects(databases__id=self.game_db_id).first()
if not instance:
return {}
database = instance.databases.filter(id=self.game_db_id).first()
data = dict(database.to_mongo())
for item in pop_item:
if item in data:
data.pop(item)
data["id"] = str(database.id)
data["host"] = instance.host
data["port"] = instance.port
return data
return {}
@property
def admin_database(self) -> dict:
"""给前端的返回,去除密码等敏感信息"""
pop_item = ["username", "password"]
if self.admin_db_id:
instance = DatabaseServer.objects(databases__id=self.admin_db_id).first()
if not instance:
return {}
database = instance.databases.filter(id=self.admin_db_id).first()
data = dict(database.to_mongo())
for item in pop_item:
if item in data:
data.pop(item)
data["id"] = str(database.id)
data["host"] = instance.host
data["port"] = instance.port
return data
return {}