Example #1
0
 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
Example #2
0
 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
Example #3
0
 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