区服模型新增数据库字段,保存数据库实例中的某个库的id
This commit is contained in:
parent
4d0bc44849
commit
bd20291004
|
@ -148,6 +148,7 @@ class ModelViewBase(Resource):
|
||||||
for field, model, required in self.relation_fields:
|
for field, model, required in self.relation_fields:
|
||||||
val = args.get(field)
|
val = args.get(field)
|
||||||
# 判断 required: 参数有提交值才校验,未在参数中或零值不校验
|
# 判断 required: 参数有提交值才校验,未在参数中或零值不校验
|
||||||
|
|
||||||
if not required and not val:
|
if not required and not val:
|
||||||
continue
|
continue
|
||||||
self.validate_relation_pk(val, model, field)
|
self.validate_relation_pk(val, model, field)
|
||||||
|
|
|
@ -72,6 +72,8 @@ class ServerParse:
|
||||||
self.request_parse.add_argument("labels", type=dict, location='json')
|
self.request_parse.add_argument("labels", type=dict, location='json')
|
||||||
|
|
||||||
self.request_parse.add_argument("host_id", type=str, location='json')
|
self.request_parse.add_argument("host_id", type=str, location='json')
|
||||||
|
self.request_parse.add_argument("game_db_id", type=str, location='json')
|
||||||
|
self.request_parse.add_argument("admin_db_id", type=str, location='json')
|
||||||
self.request_parse.add_argument("domain", type=str, location='json', default="")
|
self.request_parse.add_argument("domain", type=str, location='json', default="")
|
||||||
# status是枚举
|
# status是枚举
|
||||||
self.request_parse.add_argument("status", choices=projectModel.Server.STATUS.keys(),
|
self.request_parse.add_argument("status", choices=projectModel.Server.STATUS.keys(),
|
||||||
|
@ -92,4 +94,16 @@ class ServerParse:
|
||||||
version = args.get("version")
|
version = args.get("version")
|
||||||
if version:
|
if version:
|
||||||
args["version"] = projectModel.Version(**version)
|
args["version"] = projectModel.Version(**version)
|
||||||
|
game_db_id = args.get("game_db_id")
|
||||||
|
if game_db_id:
|
||||||
|
try:
|
||||||
|
assert assetModel.DatabaseServer.objects(databases__id=game_db_id).first()
|
||||||
|
except:
|
||||||
|
abort_response(400, 1400, msg="game_db_id not exists")
|
||||||
|
admin_db_id = args.get("admin_db_id")
|
||||||
|
if admin_db_id:
|
||||||
|
try:
|
||||||
|
assert assetModel.DatabaseServer.objects(databases__id=admin_db_id).first()
|
||||||
|
except:
|
||||||
|
abort_response(400, 1400, msg="admin_db_id not exists")
|
||||||
return args
|
return args
|
||||||
|
|
|
@ -73,6 +73,8 @@ ServerFields = {
|
||||||
"weight": fields.Integer,
|
"weight": fields.Integer,
|
||||||
"slot": fields.Integer,
|
"slot": fields.Integer,
|
||||||
"data": fields.Raw,
|
"data": fields.Raw,
|
||||||
|
"game_database": fields.Raw,
|
||||||
|
"admin_database": fields.Raw,
|
||||||
"tags": fields.List(fields.String),
|
"tags": fields.List(fields.String),
|
||||||
"labels": fields.Raw,
|
"labels": fields.Raw,
|
||||||
}
|
}
|
||||||
|
@ -98,6 +100,8 @@ AgentServerFields = {
|
||||||
"weight": fields.Integer,
|
"weight": fields.Integer,
|
||||||
"slot": fields.Integer,
|
"slot": fields.Integer,
|
||||||
"data": fields.Raw,
|
"data": fields.Raw,
|
||||||
|
"game_db": fields.Raw,
|
||||||
|
"admin_db": fields.Raw,
|
||||||
# "tags": serializer.List(serializer.String),
|
# "tags": serializer.List(serializer.String),
|
||||||
# "labels": serializer.Raw,
|
# "labels": serializer.Raw,
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ from settings import common
|
||||||
from common.document import DocumentBase
|
from common.document import DocumentBase
|
||||||
from common.validator import isalnum, is_hex_string
|
from common.validator import isalnum, is_hex_string
|
||||||
|
|
||||||
from models.asset.models import Host
|
from models.asset.models import Host, DatabaseServer
|
||||||
|
|
||||||
|
|
||||||
class Project(DocumentBase):
|
class Project(DocumentBase):
|
||||||
|
@ -95,6 +95,8 @@ class Channel(DocumentBase):
|
||||||
class Server(DocumentBase):
|
class Server(DocumentBase):
|
||||||
"""服务"""
|
"""服务"""
|
||||||
|
|
||||||
|
meta = {"strict": False}
|
||||||
|
|
||||||
STATUS = {
|
STATUS = {
|
||||||
"prepare": "预备",
|
"prepare": "预备",
|
||||||
"stopped": "停止",
|
"stopped": "停止",
|
||||||
|
@ -113,6 +115,8 @@ class Server(DocumentBase):
|
||||||
# 机器字段,TODO 先允许为空
|
# 机器字段,TODO 先允许为空
|
||||||
# host_id = mongo.StringField(max_length=128, null=True, validation=is_hex_string)
|
# host_id = mongo.StringField(max_length=128, null=True, validation=is_hex_string)
|
||||||
host_id = mongo.ObjectIdField(required=True)
|
host_id = mongo.ObjectIdField(required=True)
|
||||||
|
game_db_id = mongo.ObjectIdField(required=False)
|
||||||
|
admin_db_id = mongo.ObjectIdField(required=False)
|
||||||
domain = mongo.StringField(max_length=128, required=False, default="")
|
domain = mongo.StringField(max_length=128, required=False, default="")
|
||||||
port = mongo.IntField()
|
port = mongo.IntField()
|
||||||
version = mongo.EmbeddedDocumentField(Version)
|
version = mongo.EmbeddedDocumentField(Version)
|
||||||
|
@ -238,3 +242,73 @@ class Server(DocumentBase):
|
||||||
if hosts:
|
if hosts:
|
||||||
return queryset.filter(host_id__in=hosts)
|
return queryset.filter(host_id__in=hosts)
|
||||||
return cls.objects.none()
|
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 {}
|
||||||
|
|
Loading…
Reference in New Issue