def post(self): from models.service import Service, ServicesHasTag from models.tag import Tag from app import db, app try: s = Service() # tagids = ['1','2','3'] tagids = request.json.get('tagids', []) # tag必须是体系类tag。 tags = Tag.filter_tags(tagids, '体系') if not tags: return '标签是必选项', 400 s.name = request.json.get('name') s.description = request.json.get('description') s.image = request.json.get('image') kubernetes = request.json.get('kubernetes') if type(kubernetes) != dict: return '配置请输入json格式', 400 s.kubernetes = json.dumps(kubernetes) s.devicemodel = app.config['DEVICEMODEL'] s.createdAt = datetime.datetime.now() db.session.add(s) db.session.flush() # 新建service时指定tag for t in tags: sht = ServicesHasTag() sht.services_id = s.id sht.tag_id = t db.session.add(sht) db.session.commit() except Exception as e: print(e) db.session.rollback() return 'ERROR', 500 return 'success', 200
def patch(self): from models.node import Node, NodesHasTag from models.tag import Tag from datetime import datetime from app import db try: id = request.json.get('id') parallel = request.json.get('parallel') if not id: return '参数错误', 400 node_model = Node.query.get(id) if not node_model: return '无效的id', 400 if parallel: node_model.parallel = parallel node_model.updatedAt = datetime.now() # tag传入是个数组 tag = request.json.get('tag') # 筛选出业务tag列表 tag = Tag.filter_tags(tag, '业务') # 查出node所有的业务tag # 历史tag n = Node.query.get(id) tag_history = [] for x in n.tags: if x.type == '业务': tag_history.append(str(x.id)) add_list = list(set(tag) - set(tag_history)) delete_list = list(set(tag_history) - set(tag)) # 增添部分 for x in add_list: insert = NodesHasTag(nodes_id=id, tag_id=x) db.session.add(insert) # 删除部分 delete = NodesHasTag.query.filter(NodesHasTag.tag_id.in_(delete_list)) for x in delete: db.session.delete(x) db.session.commit() except Exception as e: print(e) db.session.rollback() return 'ERROR', 500 return 'success', 200
def post(self): from app import db from datetime import datetime from models.node import Node, NodesHasTag from models.tag import Tag from applications.common.k8s import create_node import time import hashlib try: name = request.json.get('name') parallel = request.json.get('parallel', 1) arch_class_id = request.json.get('arch_class_id') count = request.json.get('count', 1) tx_tag = request.json.get('tag_id') # 单值 yw_tag = request.json.get('buss_tag_ids') # 数组 try: if count > 10: return '单次添加节点上限10个', 400 # 校验tag是否为体系tag tag_model = Tag.query.get(tx_tag) if tag_model.type != '体系': return '必须选择体系标签', 400 yw_tag = Tag.filter_tags(yw_tag, '业务') # 模糊匹配'xxx-' oldcount = Node.query.filter(Node.name.like(name + '-%')).count() if oldcount: return '节点名重复', 400 # 小写字母开头,可含数字,可含减号 pattern = "^[a-z][a-z|0-9|\-]+$" result = re.search(pattern, name) if not result: return '节点名首字母为小写字母,可包含-或数字', 400 except Exception as e: print(e) db.session.rollback() return '后台异常', 500 for x in range(1, count + 1): token_before = name + '-' + str(x) + str(time.time()) h = hashlib.md5() h.update(token_before.encode('utf-8')) token = h.hexdigest() insert = Node(name=name + '-' + str(x), parallel=parallel, online=False, updatedAt=datetime.now(), createdAt=datetime.now(), arch_class_id=arch_class_id, token=token) db.session.add(insert) # 调用k8s起节点 create_status = create_node(name + '-' + str(x)) if not create_status: db.session.rollback() return '创建节点失败', 400 db.session.flush() # 体系tag 查出node_id后添加node_tag关系 tx = NodesHasTag(nodes_id=insert.id, tag_id=tx_tag) db.session.add(tx) # 业务tag for yw in yw_tag: a = NodesHasTag(nodes_id=insert.id, tag_id=yw) db.session.add(a) db.session.commit() except Exception as e: print(e) db.session.rollback() return 'ERROR', 500 return 'success', 200