Exemplo n.º 1
0
def post():
    form, error = JsonParser('name', 'type', 'zone', 'docker_uri', 'ssh_ip',
                             'ssh_port',
                             Argument('desc', nullable=True,
                                      required=False)).parse()
    if error is None:
        host = Host(**form)
        host.save()
        return json_response(host)
    return json_response(message=error)
Exemplo n.º 2
0
def put(host_id):
    form, error = JsonParser('name', 'type', 'zone', 'docker_uri', 'ssh_ip',
                             'ssh_port',
                             Argument('desc', nullable=True,
                                      required=False)).parse()
    if error is None:
        host = Host.query.get_or_404(host_id)
        host.update(**form)
        return json_response(host)
    return json_response(message=error)
Exemplo n.º 3
0
def setting_password():
    form, error = JsonParser(Argument('password', help='请输入原密码'),
                             Argument('newpassword', help='请输入新密码')).parse()
    if error is None:
        if g.user.verify_password(form.password):
            g.user.password = form.newpassword
            g.user.save()
        else:
            return json_response(message='原密码错误')
    return json_response(message=error)
Exemplo n.º 4
0
def exec_host_command():
    form, error = JsonParser('hosts_id', 'command').parse()
    if error is None:
        ip_list = Host.query.filter(Host.id.in_(tuple(form.hosts_id))).all()
        token = uuid.uuid4().hex
        q = QueuePool.make_queue(token, len(ip_list))
        for h in ip_list:
            Thread(target=hosts_exec, args=(q, h.ssh_ip, h.ssh_port, form.command)).start()
        return json_response(token)
    return json_response(message=error)
Exemplo n.º 5
0
def put_image(img_id):
    form, error = JsonParser(args.id, args.name, args.desc, args.value).parse()
    if error is None:
        exists_config = ImageConfig.query.filter_by(img_id=img_id,
                                                    name=form.name).first()
        if exists_config and exists_config.id != form.id:
            return json_response(message='已存在相同的变量名称!')
        config = ImageConfig.query.get_or_404(form.id)
        config.update(**form)
        return json_response()
    return json_response(message=error)
Exemplo n.º 6
0
def put(app_id):
    form, error = JsonParser(*args.values()).parse()
    if error is None:
        exists_record = App.query.filter_by(identify=form.identify).first()
        if exists_record and exists_record.id != app_id:
            return json_response(message='应用标识不能重复!')
        app = App.query.get_or_404(app_id)
        app.update(**form)
        app.save()
        return json_response(app)
    return json_response(message=error)
Exemplo n.º 7
0
def delete(ser_id):
    service = Service.query.get_or_404(ser_id)
    rel = AppConfigRel.query.filter_by(d_id=ser_id, d_type='ser').first()
    if rel:
        rel_app = App.query.get_or_404(rel.s_id)
        return json_response(message='应用 <%s> 引用了该服务,请解除关联后再尝试删除该服务!' %
                             rel_app.name)
    if ConfigKey.query.filter_by(owner_id=ser_id, owner_type='ser').count():
        return json_response(message='为了安全,请删除该服务下的所有配置后再尝试删除该服务!')
    service.delete()
    return json_response()
Exemplo n.º 8
0
def item_delete(user, data):

    note = user.note_get(data['note_id'])

    if not note:
        return json_response(400, "Missing note")

    if note.item_del(data['item_id']):
        return json_response(200, 'Item deleted successfully')

    return json_response(400, "Can't delete item")
Exemplo n.º 9
0
def get_db(user_id):
    cli = User.query.get_or_404(user_id)
    try:
        with MysqlClient(ip=cli.db_host,
                         user=cli.db_user,
                         password=cli.db_password,
                         port=cli.db_port) as f:
            res = f.basename()
            return json_response(res)
    except Exception as e:
        return json_response(message='连接失败')
Exemplo n.º 10
0
def item_add(user, data):

    note = user.note_get(data['note_id'])

    if not note:
        return json_response(400, "Missing note")

    item = note.item_add(data['name'], data['description'])
    if item:
        return json_response(200, 'Item added successfully', item.id)

    return json_response(400, "Can't create new item")
Exemplo n.º 11
0
def logs():
    form, error = JsonParser(*args.values()).parse()
    if error is None:
        pro = App.query.get_or_404(form.app_id)
        env = Environment.query.get_or_404(form.env_id)
        cli = Host.query.get_or_404(form.cli_id)
        ctr = Container(cli.docker_uri, pro.identify + '.' + env.identify)
        str_logs = ctr.logs(timestamps=True,
                            tail=20,
                            since=int(time.time() - 300))
        return json_response(str_logs)
    return json_response(message=error)
Exemplo n.º 12
0
Arquivo: host.py Projeto: zkydrx/spug
def get_valid(host_id):
    cli = Host.query.get_or_404(host_id)
    if not Setting.has('ssh_private_key'):
        utils.generate_and_save_ssh_key()
    if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
        try:
            sync_host_info(host_id, cli.docker_uri)
        except DockerException:
            return json_response(message='docker fail')
    else:
        return json_response(message='ssh fail')
    return json_response()
Exemplo n.º 13
0
def post():
    form, error = JsonParser('nickname', 'username', 'password',
                             Argument('role_id', type=int, help='请选择角色'),
                             Argument('email', nullable=True),
                             Argument('mobile', nullable=True)).parse()
    if error is None:
        username_is_exist = User.query.filter_by(username=form.username).first()
        if username_is_exist:
            return json_response(message="用户名已存在")
        User(**form).save()
        return json_response()
    return json_response(message=error)
Exemplo n.º 14
0
Arquivo: job.py Projeto: hy070111/prod
def set_trigger(job_id):
    form, error = JsonParser(
        Argument('trigger', filter=lambda x: x in ['cron', 'date', 'interval'], help='错误的调度策略!'),
        Argument('trigger_args')
    ).parse()
    if error is None:
        if not scheduler.valid_job_trigger(form.trigger, form.trigger_args):
            return json_response(message='数据格式校验失败!')
        job = Job.query.get_or_404(job_id)
        if job.update(**form):
            scheduler.update_job(job)
    return json_response(message=error)
Exemplo n.º 15
0
Arquivo: job.py Projeto: hy070111/prod
def switch(job_id):
    job = Job.query.get_or_404(job_id)
    if request.method == 'POST':
        if job.trigger is None:
            return json_response(message='请在 更多-设置触发器 中配置调度策略')
        job.update(enabled=True)
        scheduler.add_job(job)
    elif request.method == 'DELETE':
        job.update(enabled=False)
        scheduler.remove_job(job.id)
    else:
        abort(405)
    return json_response()
Exemplo n.º 16
0
def note_create(user, data):
    try:
        note = user.note_create(data)
        note.changes_add(user,
                         user.email + " created note '" + data['name'] + "'")

        if note:
            return json_response(200, 'Note created successfully', note.id)

        return json_response(200, "Can't create this note")
    except Exception as NoteCreatingError:
        log(NoteCreatingError)
        return jsonify(400)
Exemplo n.º 17
0
Arquivo: host.py Projeto: zkydrx/spug
def post_valid(host_id):
    form, error = JsonParser(Argument('secret', help='请输入root用户的密码!')).parse()
    if error is None:
        cli = Host.query.get_or_404(host_id)
        ssh.add_public_key(cli.ssh_ip, cli.ssh_port, form.secret)
        if ssh.ssh_ping(cli.ssh_ip, cli.ssh_port):
            try:
                sync_host_info(host_id, cli.docker_uri)
            except DockerException:
                return json_response(message='获取扩展信息失败,请检查docker是否可以正常连接!')
        else:
            return json_response(message='验证失败!')
    return json_response(message=error)
Exemplo n.º 18
0
def post():
    form, error = JsonParser(*args.values()).parse()
    if error is None:
        if App.query.filter_by(identify=form.identify).first():
            return json_response(message='应用标识不能重复!')
        app = App(**form)
        app.create_date = datetime.now()
        app.edit_date = datetime.now()
        app.save()
        if not g.user.is_supper:
            g.user.role.update(app_ids=g.user.role.app_ids + ',%d' % app.id)
        return json_response(app)
    return json_response(message=error)
Exemplo n.º 19
0
def state(token):
    q = QueuePool.get_queue(token)
    if q is None:
        return json_response(message='No such publish task')
    is_finished = q.finished
    try:
        message = q.get_nowait() if is_finished else q.get(timeout=10)
    except Empty:
        if is_finished:
            message = {'complete': True}
            QueuePool.remove_queue(token)
        else:
            message = {}
    return json_response(message)
Exemplo n.º 20
0
def delete(app_id):
    app = App.query.get_or_404(app_id)
    if AppHostRel.query.filter_by(app_id=app_id).first():
        return json_response(message='请先取消与已发布主机的关联后再尝试删除应用!')
    rel = AppConfigRel.query.filter_by(d_id=app_id, d_type='app').first()
    if rel:
        rel_app = App.query.get_or_404(rel.s_id)
        return json_response(message='应用 <%s> 引用了该应用,请解除关联后再尝试删除该应用!' %
                             rel_app.name)
    app_keys = ConfigKey.query.filter_by(owner_id=app_id, owner_type='app')
    if [x for x in app_keys.all() if x.type != 'system']:
        return json_response(message='为了安全,请删除该应用下的所有配置后再尝试删除该应用!')
    app_keys.delete()
    app.delete()
    return json_response()
Exemplo n.º 21
0
def get():
    form, error = JsonParser(Argument('page', type=int, default=1, required=False),
                             Argument('pagesize', type=int, default=10, required=False),
                             Argument('host_zone', type=str, required=False),).parse(request.args)
    if error is None:
        if form.page == -1:
            hosts_data = Host.query.all()
            return json_response({'data': [x.to_json() for x in hosts_data], 'total': -1})
        elif form.host_zone:
            hosts = Host.query.filter_by(zone=form.host_zone)
        else:
            hosts = Host.query
        hosts_data = hosts.limit(form.pagesize).offset((form.page - 1) * form.pagesize).all()
        return json_response({'data': [x.to_json() for x in hosts_data], 'total': hosts.count()})
    return json_response(message=error)
Exemplo n.º 22
0
def fetch_menus(app_id):
    q_type = request.args.get('type')
    if q_type == 'built-in':
        menus = DeployMenu.query.filter_by(app_id=app_id).all()
        built_in_menus = get_built_in_menus()
        for item in menus:
            built_in_menus[item.name]['command'] = item.command
        return json_response(list(built_in_menus.values()))
    pro = App.query.get_or_404(app_id)
    if q_type == 'all':
        menus = pro.menus[:]
        menus.extend(DeployMenu.query.filter_by(app_id=app_id).all()[:])
    else:
        menus = pro.menus
    return json_response(menus)
Exemplo n.º 23
0
def add():
    form, error = JsonParser('name', 'desc', 'tag').parse()
    if error is None:
        image = Image.query.filter_by(name=form.name).first()
        if image:
            return json_response(message='该镜像名字已经存在。')

        tag = form.pop('tag')
        res = Image(**form).save()

        if res:
            return json_response()

        return json_response(message='添加镜像失败,请稍后再试!')
    return json_response(message=error)
Exemplo n.º 24
0
def get_instance_log():
    form, error = JsonParser(
        Argument('task_instance_name', type=str,
                 required=True), ).parse(request.args)

    if error is None:
        try:
            path = '/tensorflow/{task_instance_name}/chief.log'.format(
                task_instance_name=form.task_instance_name)
            log = open(path, 'r', encoding='UTF-8').read()
            # 成功获取到md文件内容啦
            return json_response({'data': log})
        except OSError as reason:
            error = '读取文件出错了T_T,出错原因是%s' % str(reason)
    return json_response(message=error)
Exemplo n.º 25
0
def put(u_id):
    form, error = JsonParser('nickname', 'is_active',
                             Argument('role_id', type=int, required=False, help='请选择角色'),
                             Argument('email', nullable=True),
                             Argument('password', nullable=False, required=False),
                             Argument('mobile', nullable=True)).parse()

    if error is None:
        u_info = User.query.get_or_404(u_id)
        if form.password:
            u_info.password = form.password
        if not u_info.update(**form) and form.password:
            u_info.save()
        return json_response(u_info)
    return json_response(message=error)
Exemplo n.º 26
0
def app_update():
    form, error = JsonParser(Argument('app_id', type=int),
                             Argument('env_id', type=int),
                             Argument('deploy_message', default=''),
                             Argument('deploy_restart', type=bool),
                             Argument('host_ids', type=list)).parse()
    if error is None:
        if not g.user.check_deploy_permission(form.env_id, form.app_id):
            return json_response(message='Permission denied'), 403
        token = uuid.uuid4().hex
        q = QueuePool.make_queue(token, len(form.host_ids))
        for host_id in form.pop('host_ids'):
            Thread(target=do_update, args=(q, form, host_id)).start()
        return json_response(token)
    return json_response(message=error)
Exemplo n.º 27
0
Arquivo: host.py Projeto: zkydrx/spug
def get():
    form, error = JsonParser(Argument('page', type=int, default=1, required=False),
                             Argument('pagesize', type=int, default=10, required=False),
                             Argument('host_query', type=dict, required=False), ).parse(request.args)
    if error is None:
        host_data = Host.query
        if form.page == -1:
            return json_response({'data': [x.to_json() for x in host_data.all()], 'total': -1})
        if form.host_query.get('name_field'):
            host_data = host_data.filter(Host.name.like('%{}%'.format(form.host_query['name_field'])))
        if form.host_query.get('zone_field'):
            host_data = host_data.filter_by(zone=form.host_query['zone_field'])

        result = host_data.limit(form.pagesize).offset((form.page - 1) * form.pagesize).all()
        return json_response({'data': [x.to_json() for x in result], 'total': host_data.count()})
    return json_response(message=error)
Exemplo n.º 28
0
def get_self():
    return json_response({
        'username': g.user.username,
        'nickname': g.user.nickname,
        'mobile': g.user.mobile,
        'email': g.user.email,
    })
Exemplo n.º 29
0
def post():
    form, error = JsonParser('name', 'group', 'desc', 'command_user',
                             'command', 'targets',
                             Argument('command_user', default='root')).parse()
    if error is None:
        Job(**form).save()
    return json_response(message=error)
Exemplo n.º 30
0
def put(job_id):
    form, error = JsonParser('name', 'group', 'desc', 'command', 'targets',
                             Argument('command_user', default='root')).parse()
    if error is None:
        job = Job.query.get_or_404(job_id)
        job.update(**form)
    return json_response(message=error)