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'))
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'))
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))
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)
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'))
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)