def delete_specific_kind_pods():
    if not request.json or 'service' not in request.json:
        abort(400)
    mq_control = RabbitMq.control()
    dto = {'service': request.json['service'], 'open': mq_control}
    print dto
    return jsonify(FaultInjector.delete_all_pods_for_service(dto))
def chaos_inject_random():
    if not request.json or 'host' not in request.json or 'timeout' not in request.json:
        abort(400)
    mq_control = RabbitMq.control()
    dto = {
        'host': request.json['host'],
        'timeout': request.json['timeout'],
        'open': mq_control
    }
    return jsonify(FaultInjector.chaos_inject_random(dto))
def chaos_inject_cpu_with_time():
    if not request.json or 'host' not in request.json or 'second' not in request.json:
        abort(400)
    mq_control = RabbitMq.control()
    dto_time = {'time': request.json['second']}
    dto = {'host': request.json['host'], 'open': mq_control}
    scheduler = BackgroundScheduler()
    now = datetime.now()
    delta = timedelta(
        seconds=int(dto_time['time'].encode('raw_unicode_escape')))
    scheduler.add_job(func=lambda: FaultInjector.chaos_inject_random(dto),
                      trigger='date',
                      next_run_time=(now + delta))
    scheduler.start()
    time.sleep(delta.total_seconds() + 1)
    return "success"
def stop_all_inject_on_all_nodes():
    mq_control = RabbitMq.control()
    mq_control = {'open': mq_control}
    return jsonify(
        FaultInjector.stop_all_chaos_inject_on_all_nodes(mq_control))
def stop_specific_inject():
    if not request.json or 'tag' not in request.json:
        abort(400)
    mq_control = RabbitMq.control()
    dto = {'tag': request.json['tag'], 'open': mq_control}
    return jsonify(FaultInjector.stop_specific_chaos_inject(dto))
def stop_all_inject():
    if not request.json or 'host' not in request.json:
        abort(400)
    mq_control = RabbitMq.control()
    dto = {'host': request.json['host'], 'open': mq_control}
    return jsonify(FaultInjector.stop_all_on_specific_node(dto))
def get_message():
    return jsonify(RabbitMq.consumer())
def mq_delete():
    if not request.json or 'queue' not in request.json:
        abort(400)
    return jsonify(RabbitMq.clear_all_messages(request.json['queue']))
def mq_control():
    if not request.json or 'open' not in request.json:
        abort(400)
    return jsonify(RabbitMq.mq_control(request.json['open']))
示例#10
0
def handle_inject_result(inject_type, target_host, target_inject, result,
                         method_name, mq_control):
    """
    处理返回结果
    :param inject_type: 注入类型
    :param target_host: 目标主机地址
    :param target_inject: 注入指令
    :param result: 注入结果
    :return: 注入结果
    :param method_name: 调用者的方法名
    """
    if len(result["success"]) > 0:
        transform_ip = result["success"].keys()[0]
        stdout = result["success"][transform_ip]["stdout"]
        result_ = stdout.split(',', 3)[2]
        tag_result = result_.split(':', 2)[1].replace('"', '').replace('}', '')
        the_has_injected = {
            "host":
            target_host.encode('unicode_escape').decode('string_escape'),
            "inject_type": inject_type,
            "tag": tag_result.encode('unicode_escape').decode('string_escape')
        }
        if inject_type != "destroy":
            has_injected.append(the_has_injected)
        the_inject_info = {
            "position":
            inject_type,
            "ip":
            target_host,
            "start_time":
            result["success"][transform_ip]["start"],
            "cmd":
            result["success"][transform_ip]["cmd"],
            "cmd_id":
            json.loads(result["success"][transform_ip]["stdout"].encode(
                'unicode-escape').decode('string_escape'))["result"].encode(
                    'unicode-escape').decode('string_escape')
        }
        if inject_type != "destroy":
            inject_info.append(the_inject_info)
        Logger.log(
            'info', 'SUCCESS - Method : ' + method_name + "() - - " +
            str(the_inject_info))
        if mq_control == 'true':
            RabbitMq.connect(the_inject_info)
        return result
    else:
        if len(result["unreachable"]) > 0:
            transform_ip = result["unreachable"].keys()[0]
            message = result["unreachable"][transform_ip]["msg"]
            flag = "UNREACHABLE"
        else:
            transform_ip = result["failed"].keys()[0]
            message = result["failed"][transform_ip]["msg"]
            flag = "FAILED"
        the_inject_info = {
            "ip": target_host,
            "position": inject_type,
            "cmd": target_inject,
            "message": message
        }
        Logger.log(
            "error", flag + " - Method : " + method_name + "() - - " +
            str(the_inject_info))
    return result
示例#11
0
 def stop_specific_chaos_inject(dto):
     stop_id = dto['tag']
     target_host = ''
     find = 0
     key = 0
     for i in range(0, len(inject_info)):
         if inject_info[i]['cmd_id'] == stop_id:
             target_host = inject_info[i]['ip']
             find = 1
             key = i
     for i in range(0, len(has_injected)):
         if target_host == has_injected[i][
                 'host'] and stop_id == has_injected[i]['tag']:
             has_injected.pop(i)
             break
     if find == 1:
         r = Runner()
         r.run_ad_hoc(hosts=Spare_hosts[inject_info[key]['ip']],
                      module='shell',
                      args='./blade destroy ' + stop_id)
         result = r.get_adhoc_result()
         if len(result["success"]) > 0:
             transform_ip = result["success"].keys()[0]
             the_stop_info = {
                 "position": inject_info[key]["position"],
                 "ip": Spare_hosts[inject_info[key]["ip"]],
                 "start_time": result["success"][transform_ip]["start"],
                 "cmd": result["success"][transform_ip]["cmd"],
             }
             inject_info.pop(key)
             Logger.log(
                 'info',
                 'SUCCESS - Method : ' + sys._getframe().f_code.co_name +
                 "() - - " + str(the_stop_info))
             if dto['open'] == 'true':
                 RabbitMq.connect(the_stop_info)
             return result
         else:
             if len(result["unreachable"]) > 0:
                 transform_ip = result["unreachable"].keys()[0]
                 message = result["unreachable"][transform_ip]["msg"]
                 flag = "UNREACHABLE"
             else:
                 transform_ip = result["failed"].keys()[0]
                 message = result["failed"][transform_ip]["msg"]
                 flag = "FAILED"
             the_stop_info = {
                 "position": inject_info[key]["position"],
                 "ip": Spare_hosts[inject_info[key]["ip"]],
                 "cmd": "./blade destroy " + stop_id,
                 "message": message
             }
             Logger.log(
                 "error",
                 flag + " - Method : " + sys._getframe().f_code.co_name +
                 "() - - " + str(the_stop_info))
             return result
     else:
         the_stop_info = {
             "cmd": "./blade destroy " + stop_id,
         }
         Logger.log(
             'error',
             'UID NOT FOUND -  Method : ' + sys._getframe().f_code.co_name +
             "() - - " + str(the_stop_info))
         return 'Inject not found'