Beispiel #1
0
    def get(self):
        logger.info("HOSTLIST")
        product_id = request.args.get("product_id")
        db = DB()
        status, result = db.select(
            "host", "where data -> '$.product_id'='%s'" % product_id)
        if status is True:
            host_list = result
        else:
            db.close_mysql()
            return {"status": False, "message": result}, 500

        status, result = db.select(
            "groups", "where data -> '$.product_id'='%s'" % product_id)
        if status is True:
            groups_list = result
        else:
            db.close_mysql()
            return {"status": False, "message": result}, 500
        for host in host_list:
            for group in groups_list:
                for minion in group["minion"]:
                    if host["minion_id"] == minion:
                        host["groups"].append(group["name"])

        db.close_mysql()
        return {"data": host_list, "status": True, "message": ""}, 200
Beispiel #2
0
 def get(self):
     args = parser.parse_args()
     db = DB()
     status, result = db.select(
         "cmd_history", "where data -> '$.product_id'='%s' and "
         "data -> '$.type'='%s' "
         "order by data -> '$.time' desc" %
         (args["product_id"], args["type"]))
     history_list = []
     user_status, user_result = db.select("user", "")
     if user_status is True and user_result:
         user_list = user_result
     else:
         return {"status": False, "message": user_result}, 500
     db.close_mysql()
     if status is True:
         if result:
             for history in result:
                 for user in user_list:
                     if history["user_id"] == user["id"]:
                         history["username"] = user["username"]
                 history_list.append(history)
     else:
         return {"status": False, "message": result}, 500
     return {"data": history_list, "status": True, "message": ""}, 200
Beispiel #3
0
 def post(self):
     logger.info("PingList")
     args = parser.parse_args()
     db = DB()
     host_id = args['host_id']
     cipher = args['cipher']
     state, result = db.select('host',
                               "where data -> '$.id'='%s'" % host_id)
     minion_id = result[0]['minion_id']
     logger.info('minion_id:' + minion_id)
     product_id = result[0]['product_id']
     salt_api = salt_api_for_product(product_id)
     state, targets = db.select('target',
                                "where data -> '$.host_id'='%s'" % host_id)
     targets_not = []
     thread_pool = ThreadPoolExecutor(max_workers=10,
                                      thread_name_prefix="target_")
     futures = []
     for target in targets:
         future = thread_pool.submit(pingTarget, target, minion_id,
                                     salt_api, cipher)
         futures.append(future)
     thread_pool.shutdown(wait=True)
     for future in futures:
         result = future.result()
         logger.info(str(result['status']))
         if str(result['status']).__contains__("Timeout") | str(
                 result['status']).__contains__("Unknown"):
             targets_not.append(result["target"])
     return {"status": True, "message": '配置发送成功', "data": targets_not}, 200
Beispiel #4
0
 def get(self):
     product_id = request.args.get("product_id")
     scheduler_type = request.args.get("scheduler_type")
     db = DB()
     task = []
     if scheduler_type:
         sql = "where data -> '$.product_id'='%s' and data -> '$.scheduler'!='%s' " \
               "order by data -> '$.timestamp' desc" % (product_id, scheduler_type)
     else:
         sql = "where data -> '$.product_id'='%s' order by data -> '$.timestamp' desc" % product_id
     status, result = db.select("period_task", sql)
     if status is True:
         for period in result:
             target = []
             for group_id in period.get("target"):
                 group_status, group_result = db.select_by_id(
                     "groups", group_id)
                 if group_status is True:
                     target.append({
                         "id": group_id,
                         "name": group_result.get("name")
                     })
             period["target"] = target
             period_audit_status, period_audit_result = db.select(
                 "period_audit",
                 "where data -> '$.id'='%s' order by data -> '$.result.timestamp' desc limit 1"
                 % period["id"])
             period["audit"].extend(period_audit_result)
             task.append(period)
         db.close_mysql()
         return {"data": task, "status": True, "message": ""}, 200
     else:
         return {"status": False, "message": task}, 500
Beispiel #5
0
 def get(self):
     logger.info("ProductListConfig")
     db = DB()
     user_info = g.user_info
     role_sql = []
     if user_info["role"]:
         for role in user_info["role"]:
             role_sql.append("data -> '$.id'='%s'" % role)
         sql = " or ".join(role_sql)
         role_status, role_result = db.select("role", "where %s" % sql)
         if role_status and role_result:
             for role in role_result:
                 if role["tag"] == 0:
                     status, result = db.select(
                         "product",
                         "where data -> '$.name'='%s'" % 'config')
                     db.close_mysql()
                     product_list = []
                     if status is True:
                         if result:
                             product_list = result
                     else:
                         return {"status": False, "message": result}, 500
                     return {
                         "data": product_list,
                         "status": True,
                         "message": ""
                     }, 200
     sql_list = []
     product_list = []
     if user_info["product"]:
         for product in user_info["product"]:
             sql_list.append("data -> '$.id'='%s'" % product)
         sql = " or ".join(sql_list)
         status, result = db.select(
             "product", "where data -> '$.name'='%s'" % 'config')
         db.close_mysql()
         if status is True:
             if result:
                 product_list = result
                 return {
                     "data": product_list,
                     "status": True,
                     "message": ""
                 }, 200
             else:
                 return {
                     "status": False,
                     "message": "Group does not exist"
                 }, 404
         else:
             return {"status": False, "message": result}, 500
     return {"data": product_list, "status": True, "message": ""}, 200
Beispiel #6
0
    def get(self):
        db = DB()
        user_info = g.user_info
        role_sql = []
        if user_info["role"]:
            for role in user_info["role"]:
                role_sql.append("data -> '$.id'='%s'" % role)
            sql = " or ".join(role_sql)
            role_status, role_result = db.select("role", "where %s" % sql)
            if role_status and role_result:
                for role in role_result:
                    user_list = []
                    if role["tag"] == 0:
                        status, result = db.select("user", "")
                    else:
                        status, result = db.select_by_list_list(
                            "user", "product", user_info["product"])
                    if status is True:
                        if result:
                            for user in result:
                                user.pop("password")
                                user_list.append(user)
                        else:
                            return {
                                "data": user_list,
                                "status": True,
                                "message": ""
                            }, 200
                    else:
                        return {"status": False, "message": result}, 500

        for item in user_list:
            for attr in item.keys():
                if attr not in ["id", "username", "mail"]:
                    if item[attr]:
                        tmp = []
                        status, result = db.select_by_list(
                            attr, "id", item[attr])
                        if status is True:
                            for info in result:
                                tmp.append({
                                    "id": info["id"],
                                    "name": info["name"]
                                })
                            item[attr] = tmp
                        else:
                            db.close_mysql()
                            return {"status": False, "message": result}, 500
        db.close_mysql()
        return {"data": user_list, "status": True, "message": ""}, 200
Beispiel #7
0
 def get(self):
     product_id = request.args.get("product_id")
     db = DB()
     status, result = db.select(
         "groups", "where data -> '$.product_id'='%s'" % product_id)
     db.close_mysql()
     groups_list = []
     if status is True:
         if result:
             for i in result:
                 try:
                     groups_list.append(eval(i[0]))
                 except Exception as e:
                     return {"status": False, "message": str(e)}, 500
         else:
             return {
                 "groups": {
                     "group": groups_list
                 },
                 "status": True,
                 "message": ""
             }, 200
     else:
         return {"status": False, "message": result}, 500
     return {
         "groups": {
             "group": groups_list
         },
         "status": True,
         "message": ""
     }, 200
Beispiel #8
0
def update_user_privilege(table, privilege):
    db = DB()
    status, result = db.select("user", "")
    if status is True:
        if result:
            for i in result:
                try:
                    info = eval(i[0])
                    if table in info:
                        if privilege in info[table]:
                            info[table].remove(privilege)
                            db.update_by_id("user", json.dumps(info, ensure_ascii=False), info["id"])
                except Exception as e:
                    db.close_mysql()
                    logger.error("Update user privilege error: %s" % str(e))
                    return {"status": False, "message": str(e)}
            db.close_mysql()
            return {"status": True, "message": ""}
        else:
            db.close_mysql()
            return {"status": False, "message": "User does not exist"}
    else:
        db.close_mysql()
        logger.error("Update user privilege error: %s" % result)
        return {"status": False, "message": result}
Beispiel #9
0
 def create_grains(minion_list, product_id, user):
     salt_api = salt_api_for_product(product_id)
     if isinstance(salt_api, dict):
         return salt_api, 500
     db = DB()
     for minion in minion_list:
         select_status, select_result = db.select(
             "grains", "where data -> '$.id'='%s' and data -> "
             "'$.product_id'='%s'" % (minion, product_id))
         grains = salt_api.grains(minion)
         grains[minion].update({"product_id": product_id})
         if select_status is True:
             if len(select_result) > 1:
                 for m in select_result:
                     db.delete_by_id("grains", m["id"])
                 insert_status, insert_result = db.insert(
                     "grains", json.dumps(grains[minion],
                                          ensure_ascii=False))
                 if insert_status is not True:
                     logger.error("Add Grains error: %s" % insert_result)
             elif len(select_result) == 1:
                 update_status, update_result = db.update_by_id(
                     "grains", json.dumps(grains[minion],
                                          ensure_ascii=False),
                     select_result[0]["id"])
                 if update_status is not True:
                     logger.error("Update Grains error: %s" % update_result)
             else:
                 insert_status, insert_result = db.insert(
                     "grains", json.dumps(grains[minion],
                                          ensure_ascii=False))
                 if insert_status is not True:
                     logger.error("Add Grains error: %s" % insert_result)
     db.close_mysql()
Beispiel #10
0
 def get(self):
     args = parser.parse_args()
     action = args["action"]
     if action == "start":
         db = DB()
         status, result = db.select("product", "")
         db.close_mysql()
         if status is True:
             if result:
                 for product in result:
                     event_to_mysql.delay(product['id'])
                 return {"data": "", "status": True, "message": ""}, 200
             else:
                 return {
                     "data": "",
                     "status": False,
                     "message": "Product does not exist"
                 }, 404
         else:
             return {"data": "", "status": False, "message": result}, 500
     if action == "stop":
         echo = os.popen("celery -A app.celery inspect active --json")
         info = echo.readline()
         try:
             result = eval(
                 info.replace("true", "'true'").replace("false", "'false'"))
             for k, v in result.items():
                 for w in v:
                     os.popen("kill -9 %s" % w.get("worker_pid"))
             return {"data": "", "status": True, "message": ""}, 200
         except Exception as e:
             logger.error("Stop celery error: %s" % e)
             return {"data": "", "status": False, "message": "%s" % e}, 200
Beispiel #11
0
def create_git_project(product_id, project_name):
    logger.info("create_git_project1")
    db = DB()
    status, result = db.select(
        'projects', "where data -> '$.gitlab_name'='%s'" % project_name)
    if status is True:
        if len(result) == 0:
            logger.info('project_name:' + project_name)
            gl = get_gitlab(product_id)
            try:
                gl.projects.create({'name': project_name})
            except Exception as e:
                raise Exception('该gitlab项目名已被占用')
            projects = gl.projects.list(all=True)
            for pr in projects:
                if str(pr.__dict__.get('_attrs').get(
                        'path_with_namespace')).replace('root/',
                                                        '') == project_name:
                    project = gl.projects.get(
                        pr.__dict__.get('_attrs').get('id'))
                    commit_init_file(project)
            return True
        else:
            db.close_mysql()
            return False
    else:
        db.close_mysql()
        raise Exception('mysql select from projects error')
Beispiel #12
0
def menu_list(username):
    db = DB()
    status, result = db.select("user",
                               "where data -> '$.username'='%s'" % username)
    menu = []
    if status is True and result:
        try:
            roles = result[0].get("role")
            for role in roles:
                status, result = db.select_by_id("role", role)
                if status is True and result:
                    if result["tag"] == role_dict["superuser"]:
                        # 100 放到最后以保证系统管理在最后
                        menu = [
                            1, 10, 11, 12, 2, 20, 21, 22, 3, 30, 4, 40, 5, 50,
                            6, 60, 61, 62, 63, 7, 70, 8, 80, 100, 101, 102,
                            103, 104
                        ]
                        break
                    elif result["tag"] == role_dict["product"]:
                        menu = [
                            1, 10, 11, 12, 2, 20, 21, 22, 3, 30, 4, 40, 5, 50,
                            6, 60, 61, 62, 63, 7, 70, 8, 80, 100, 103
                        ]
                        break
                    else:
                        menu = [
                            1, 10, 11, 12, 2, 20, 22, 3, 30, 5, 50, 6, 60, 61,
                            62, 63
                        ]
        except Exception as e:
            logger.error("Menu list error: %s" % e)
    db.close_mysql()
    return menu
Beispiel #13
0
 def put(self, user_id):
     args = parser.parse_args()
     user = g.user_info["username"]
     if not args["mail"]:
         return {
             "status": False,
             "message": "The specified mail parameter does not exist"
         }, 200
     db = DB()
     select_status, select_result = db.select(
         "user", "where data -> '$.username'='%s'" % args["username"])
     if select_status is True and select_result:
         if select_result[0]["id"] != user_id:
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The user name already exists"
             }, 200
     status, result = db.select_by_id("user", user_id)
     if status is True and result:
         result["username"] = args["username"]
         result["mail"] = args["mail"]
         update_status, update_result = db.update_by_id(
             "user", json.dumps(result, ensure_ascii=False), user_id)
         db.close_mysql()
         if update_status is not True:
             logger.error("Change %s user info error: %s" %
                          (user_id, update_result))
             return {"status": False, "message": update_result}, 500
         audit_log(user, user_id, "", "user", "change user info")
         return {"status": True, "message": ""}, 201
     else:
         db.close_mysql()
         logger.error("Select user error: %s" % result)
         return {"status": False, "message": result}, 500
Beispiel #14
0
 def put(self, period_id):
     user = g.user_info["username"]
     args = parser.parse_args()
     args["id"] = period_id
     period_task = args
     db = DB()
     # 判断是否存在
     select_status, select_result = db.select_by_id("period_task",
                                                    period_id)
     if select_status is not True:
         db.close_mysql()
         logger.error("Modify period_task error: %s" % select_result)
         return {"status": False, "message": select_result}, 500
     if not select_result:
         db.close_mysql()
         return {
             "status": False,
             "message": "%s does not exist" % period_id
         }, 404
     # 判断名字否已经存在
     status, result = db.select(
         "period_task",
         "where data -> '$.name'='%s' and data -> '$.product_id'='%s'" %
         (args["name"], args["product_id"]))
     if status is True and result:
         if period_id != result[0].get("id"):
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The period_task name already exists"
             }, 200
     period_task["result"] = select_result["result"]
     period_task["timestamp"] = select_result["timestamp"]
     period_task["status"] = select_result["status"]
     period_task["action"] = select_result["action"]
     period_task["executed_minion"] = select_result["executed_minion"]
     period_task["count"] = select_result["count"]
     period_task["step"] = select_result["step"]
     period_task["audit"] = select_result["audit"]
     if args["once"]["date"]:
         args["once"]["date"] = utc_to_local(args["once"]["date"])
     status, result = db.update_by_id(
         "period_task", json.dumps(period_task, ensure_ascii=False),
         period_id)
     db.close_mysql()
     # 修改调度任务
     if args["scheduler"] == "once" and args["once"]["type"] == "timing":
         run_date = args["once"]["date"].split(
             " ")[0] + " " + args["once"]["time"]
         scheduler_timing_modify(args["id"], args["product_id"], user,
                                 run_date)
     if args["scheduler"] == "period":
         scheduler_interval_modify(args["id"], args["product_id"], user,
                                   args["period"]["interval"],
                                   args["period"]["type"])
     if status is not True:
         logger.error("Modify period_task error: %s" % result)
         return {"status": False, "message": result}, 500
     audit_log(user, period_id, "", "period_task", "edit")
     return {"status": True, "message": ""}, 200
Beispiel #15
0
 def get(self):
     db = DB()
     user_info = g.user_info
     sql_list = []
     groups_list = []
     if user_info["groups"]:
         for group in user_info["groups"]:
             sql_list.append("data -> '$.id'='%s'" % group)
         sql = " or ".join(sql_list)
         status, result = db.select("groups", "where %s" % sql)
         db.close_mysql()
         if status is True:
             if result:
                 for i in result:
                     try:
                         groups_list.append(eval(i[0]))
                     except Exception as e:
                         return {"status": False, "message": str(e)}, 500
             else:
                 return {
                     "status": False,
                     "message": "Group does not exist"
                 }, 404
         else:
             return {"status": False, "message": result}, 500
         return {"groups": {"groups": groups_list}}, 200
     else:
         return {"groups": {"groups": groups_list}}, 200
Beispiel #16
0
 def post(self):
     user = g.user_info["username"]
     args = parser.parse_args()
     args["id"] = uuid_prefix("u")
     db = DB()
     status, result = db.select(
         "user", "where data -> '$.username'='%s'" % args["username"])
     if status is True:
         if len(result) == 0:
             # 默认新添加的用户都是默认用户
             role_id = get_common_user()
             if isinstance(role_id, dict):
                 return role_id
                 args["role"].append(role_id)
             insert_status, insert_result = db.insert(
                 "user", json.dumps(args, ensure_ascii=False))
             db.close_mysql()
             if insert_status is not True:
                 logger.error("Add user error: %s" % insert_result)
                 return {"status": False, "message": insert_result}, 500
             audit_log(user, args["id"], "", "user", "add")
             return {"status": True, "message": ""}, 201
         else:
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The user name already exists"
             }, 200
     else:
         db.close_mysql()
         logger.error("Select user error: %s" % result)
         return {"status": False, "message": result}, 500
Beispiel #17
0
 def get(self):
     product_id = request.args.get("product_id")
     db = DB()
     user_info = g.user_info
     sql_list = []
     groups_list = []
     if user_info["groups"]:
         for group in user_info["groups"]:
             sql_list.append(
                 "data -> '$.id'='%s' and data -> '$.product_id'='%s'" %
                 (group, product_id))
         sql = " or ".join(sql_list)
         status, result = db.select("groups", "where %s" % sql)
         db.close_mysql()
         if status is True:
             if result:
                 groups_list = result
                 return {
                     "data": groups_list,
                     "status": True,
                     "message": ""
                 }, 200
             else:
                 return {
                     "status": False,
                     "message": "Group does not exist"
                 }, 404
         else:
             return {"status": False, "message": result}, 500
     else:
         return {"data": groups_list, "status": True, "message": ""}, 200
Beispiel #18
0
 def get(self):
     db = DB()
     status, result = db.select("product", "")
     db.close_mysql()
     product_list = []
     if status is True:
         if result:
             for i in result:
                 try:
                     product_list.append(eval(i[0]))
                 except Exception as e:
                     return {"status": False, "message": str(e)}, 500
         else:
             return {
                 "status": False,
                 "message": "Product does not exist"
             }, 404
     else:
         return {"status": False, "message": result}, 500
     return {
         "products": {
             "product": product_list
         },
         "status": True,
         "message": ""
     }, 200
Beispiel #19
0
 def get(self):
     user = g.user_info["username"]
     args = parser.parse_args()
     salt_api = salt_api_for_product(args["product_id"])
     minions = []
     minions_mysql = []
     if isinstance(salt_api, dict):
         return salt_api, 500
     else:
         result = salt_api.list_all_key()
         if result:
             if result.get("status") is False:
                 return result, 500
             for minion in result.get("minions"):
                 minions.append(minion)
     # 同步产品线下的Grains
     Grains.create_grains(minions, args["product_id"], user)
     db = DB()
     status, result = db.select("grains", "where data -> '$.product_id'='%s'" % args["product_id"])
     db.close_mysql()
     if status is True and result:
         for i in result:
             minions_mysql.append(i.get("id"))
     # 对比数据库中的minion与已经同意的minion的不同,删掉数据库中多余的minion
     diff = list(set(minions_mysql).difference(minions))
     Grains.delete_grains(diff, args["product_id"], user)
     return {"status": True, "message": ""}, 200
Beispiel #20
0
 def put(self, role_id):
     user = g.user_info["username"]
     args = parser.parse_args()
     args["id"] = role_id
     role = args
     db = DB()
     status, result = db.select(
         "role", "where data -> '$.name'='%s'" % args["name"])
     if status is True:
         if len(result) != 0:
             info = eval(result[0][0])
             if role_id != info.get("id"):
                 return {
                     "status": False,
                     "message": "The role name already exists"
                 }, 200
     status, result = db.update_by_id("role",
                                      json.dumps(role, ensure_ascii=False),
                                      role_id)
     db.close_mysql()
     if status is not True:
         logger.error("Modify role error: %s" % result)
         return {"status": False, "message": result}, 500
     audit_log(user, role_id, "", "role", "edit")
     return {"status": True, "message": ""}, 200
Beispiel #21
0
    def delete(self, groups_id):
        db = DB()
        # 首先获得所需项目
        status, result = db.select_by_id("groups", groups_id)
        if status:
            group = result
        else:
            return {"status": False, "message": str(result)}, 500
        # 执行删除
        status, result = db.delete_by_id("groups", groups_id)

        if status is not True:
            return {"status": False, "message": result}, 500
        if result is 0:
            return {
                "status": False,
                "message": "%s does not exist" % groups_id
            }, 404
        # 完成数据的统一,将project中的组类别删除
        project_list = group['projects']
        for project_name in project_list:
            status, result = db.select(
                'projects', "where data -> '$.name'='%s'" % project_name)
            project_origion = dict(result[0])
            group_list = list(project_origion['groups'])
            group_list.remove(groups_id)
            project_origion['groups'] = group_list
            db.update_by_id("projects",
                            json.dumps(project_origion, ensure_ascii=False),
                            result[0]['id'])
        db.close_mysql()
        return {"status": True, "message": ""}, 200
Beispiel #22
0
 def post(self):
     args = parser.parse_args()
     args["id"] = uuid_prefix("p")
     user = g.user_info["username"]
     product = args
     db = DB()
     status, result = db.select(
         "product", "where data -> '$.name'='%s'" % args["name"])
     if status is True:
         if len(result) == 0:
             insert_status, insert_result = db.insert(
                 "product", json.dumps(product, ensure_ascii=False))
             db.close_mysql()
             if insert_status is not True:
                 logger.error("Add product error: %s" % insert_result)
                 return {"status": False, "message": insert_result}, 500
             audit_log(user, args["id"], "", "product", "add")
             return {"status": True, "message": ""}, 201
         else:
             return {
                 "status": False,
                 "message": "The product name already exists"
             }, 200
     else:
         logger.error("Select product name error: %s" % result)
         return {"status": False, "message": result}, 500
Beispiel #23
0
 def post(self):
     args = parser.parse_args()
     args["id"] = uuid_prefix("project")
     db = DB()
     project = transfer_args_to_project(args)
     # 如果是创建,group们必然是增加此项目名
     status, result = db.select(
         "projects",
         "where data -> '$.name'='%s' and data -> '$.product_id'='%s'" %
         (args["name"], args["product_id"]))
     if status is True:
         if len(result) == 0:
             try:
                 create_git_project(args['product_id'], args['gitlab_name'])
                 git_clone(args['product_id'], args['gitlab_name'])
             except Exception as e:
                 return {"status": False, "message": str(e)}, 500
             insert_status, insert_result = db.insert(
                 "projects", json.dumps(project, ensure_ascii=False))
             update_group_for_create_project(project['name'],
                                             project['groups'])
             db.close_mysql()
             if insert_status is not True:
                 return {"status": False, "message": insert_result}, 500
             return {"status": True, "message": ""}, 200
         else:
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The projects name already exists"
             }, 500
     else:
         db.close_mysql()
         return {"status": False, "message": result}, 500
Beispiel #24
0
 def get(self, host_id):
     logger.info("HOST")
     db = DB()
     status, result = db.select_by_id("host", host_id)
     if status is True:
         if result:
             host = result
         else:
             return {
                 "status": False,
                 "message": "%s does not exist" % host_id
             }, 404
     else:
         return {"status": False, "message": result}, 500
     status, result = db.select(
         "groups", "where data -> '$.product_id'='%s'" % host["product_id"])
     if status is True:
         groups_list = result
     else:
         db.close_mysql()
         return {"status": False, "message": result}, 500
     for group in groups_list:
         for minion in group["minion"]:
             if host["minion_id"] == minion:
                 host["groups"].append(group["name"])
     db.close_mysql()
     return {"data": host, "status": True, "message": ""}, 200
Beispiel #25
0
 def reject_host(minion_list, product_id, user):
     db = DB()
     for minion_id in minion_list:
         select_status, select_result = db.select(
             "host", "where data -> '$.minion_id'='%s' "
             "and data -> '$.product_id'='%s'" % (minion_id, product_id))
         if select_status is False:
             logger.error("Reject %s host error: %s" %
                          (minion_id, select_result))
         if select_result:
             for host in select_result:
                 try:
                     # 拒绝后添加拒绝标签
                     host["tag"].append({"name": "reject", "color": "red"})
                     status, result = db.update_by_id(
                         "host", json.dumps(host, ensure_ascii=False),
                         host["id"])
                     if status is False:
                         logger.error("Reject %s host error: %s" %
                                      (minion_id, result))
                     else:
                         audit_log(user, host["id"], product_id, "host",
                                   "reject")
                 except Exception as e:
                     logger.error("Reject %s host error: %s" %
                                  (minion_id, e))
         else:
             logger.error("Select %s host does not exist" % minion_id)
     db.close_mysql()
Beispiel #26
0
 def add_host(minion_list, product_id, user):
     db = DB()
     for minion_id in minion_list:
         select_status, select_result = db.select(
             "host", "where data -> '$.minion_id'='%s' "
             "and data -> '$.product_id'='%s'" % (minion_id, product_id))
         if select_status is False:
             logger.error("Add %s host error: %s" %
                          (minion_id, select_result))
             continue
         if not select_result:
             id = uuid_prefix("h")
             host = {
                 "id": id,
                 "minion_id": minion_id,
                 "product_id": product_id,
                 "groups": [],
                 "tag": [],
             }
             insert_status, insert_result = db.insert(
                 "host", json.dumps(host, ensure_ascii=False))
             if insert_status is False:
                 logger.error("Add %s host error: %s" %
                              (minion_id, insert_result))
             else:
                 audit_log(user, id, product_id, "host", "add")
     db.close_mysql()
Beispiel #27
0
 def post(self):
     logger.info("HOSTLIST")
     args = parser.parse_args()
     args["id"] = uuid_prefix("h")
     user = g.user_info["username"]
     host = args
     db = DB()
     status, result = db.select(
         "host", "where data -> '$.minion_id'='%s'" % args["minion_id"])
     if status is True:
         if len(result) == 0:
             insert_status, insert_result = db.insert(
                 "host", json.dumps(host, ensure_ascii=False))
             db.close_mysql()
             if insert_status is not True:
                 logger.error("Add host error: %s" % insert_result)
                 return {"status": False, "message": insert_result}, 500
             audit_log(user, args["id"], args["product_id"], "host", "add")
             return {"status": True, "message": ""}, 201
         else:
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The host name already exists"
             }, 200
     else:
         db.close_mysql()
         logger.error("Select host name error: %s" % result)
         return {"status": False, "message": result}, 500
Beispiel #28
0
def verify_acl(acl_list, command):
    if acl_list:
        db = DB()
        sql_list = []
        for acl_id in acl_list:
            sql_list.append("data -> '$.id'='%s'" % acl_id)
        sql = " or ".join(sql_list)
        status, result = db.select("acl", "where %s" % sql)
        db.close_mysql()
        if status is True:
            if result:
                for i in result:
                    try:
                        acl = eval(i[0])
                        for deny in acl["deny"]:
                            deny_pattern = re.compile(deny)
                            if deny_pattern.search(command):
                                return {
                                    "status":
                                    False,
                                    "message":
                                    "Deny Warning : You don't have permission run [ %s ]"
                                    % command
                                }
                    except Exception as e:
                        return {"status": False, "message": str(e)}
                return {"status": True, "message": ""}
            else:
                return {"status": False, "message": "acl does not exist"}
        else:
            return {"status": False, "message": result}
    else:
        return {"status": True, "message": ""}
Beispiel #29
0
 def get(self):
     db = DB()
     status, result = db.select("role", "")
     db.close_mysql()
     if status is True:
         return {"data": result, "status": True, "message": ""}, 200
     else:
         return {"status": False, "message": result}, 500
Beispiel #30
0
 def get(self):
     db = DB()
     state, hosts_list = db.select('host', '')
     if state:
         db.close_mysql()
         return {"status": True, "message": "", "data": hosts_list}, 200
     else:
         db.close_mysql()
         return {"status": False, "message": str(state)}, 500