示例#1
0
def restart_container(container_id: str):
    user = get_user_by_email(current_user.email)
    containers_ids = get_docker_containers_ids(docker_client, user)
    if container_id not in containers_ids:
        flash('You do not own this container. Access forbidden.', 'error')
        return redirect(url_for('index'))
    docker_client.containers.get(container_id).start()
    return redirect(url_for('index'))
示例#2
0
def delete_container(container_id: str):
    user = get_user_by_email(current_user.email)
    containers_ids = get_docker_containers_ids(docker_client, user)
    if container_id not in containers_ids:
        flash('You do not own this container. Access forbidden.', 'error')
        return redirect(url_for('index'))
    container = docker_client.containers.get(container_id)
    delete_association_user_container(db, container)
    container.remove(force=True)
    return redirect(url_for('index'))
示例#3
0
def get_container_logs(container_id: str) -> Dict[str, str]:
    #  This function is used as an API endpoint for javascript functions
    user = get_user_by_email(current_user.email)
    containers_ids = get_docker_containers_ids(docker_client, user)
    if container_id not in containers_ids:
        html = 'You do not own this container. Access forbidden'
        return jsonify(dict(html=html))
    container = docker_client.containers.get(container_id)
    if container.status != 'running':
        html = 'Container is not running. You need to restart the container to show logs.'
        return jsonify(dict(html=html))
    html = f'<pre style="text-align: left"><code>{container.exec_run("env").output.decode()}</code></pre>' \
        f'<hr><pre style="text-align: left"><code>{container.logs().decode()}</code></pre>'
    return jsonify(dict(html=html))
示例#4
0
def report_message():
    if list(request.json.keys()) != ['message']:
        response = dict(content='A wrong form has been sent.',
                        category='error')
        return jsonify(response)
    message = request.json['message']
    if len(message) >= 500:
        response = dict(content='The message can not exceed 500 characters.',
                        category='error')
        return jsonify(response)
    user = get_user_by_email(current_user.email)
    save_report_message(db, user, message)
    response = dict(content='Your message has been sent successfully.',
                    category='success')
    return jsonify(response)
示例#5
0
def create_container():
    if list(request.form.keys()) != ['image']:
        flash('A wrong form has been sent.', 'error')
        return redirect(url_for('index'))
    image = request.form['image']
    if not check_image(image):
        #  image is not from registry
        flash('A wrong form has been sent.', 'error')
        return redirect(url_for('index'))
    user = get_user_by_email(current_user.email)
    if not current_user.is_admin and not docker_image_already_deployed_by_user(
            db, user, image):
        flash(
            'You cannot run several containers from the same docker image with a non-admin account.',
            'error')
        return redirect(url_for('index'))
    container = deploy_container(docker_client, image, current_user)
    associate_user_container(db, user, container, image)
    return redirect(url_for('index'))
示例#6
0
def index():
    user = get_user_by_email(current_user.email)
    containers = get_docker_containers(docker_client, user)
    images = get_docker_images(docker_client)
    return render_template('index.html', containers=containers, images=images)