Skip to content

Commit

Permalink
Merge pull request #208 from dump-hr/fix-code-runner
Browse files Browse the repository at this point in the history
fix code runnner on fesb PCs
  • Loading branch information
bdeak4 authored Oct 11, 2024
2 parents c09ba44 + c8ed5d6 commit 7aab2fe
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 1 deletion.
2 changes: 2 additions & 0 deletions infrastructure/ansible/inventories/code-runner.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[web]
49.12.103.189
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
- name: traefiknet
labels:
traefik.enable: 'true'
traefik.http.routers.api.rule: 'Host(`{{ api_domain }}`)'
traefik.http.routers.api.rule: 'Host(`{{ api_domain }}`) || Host(`internship-app.bdeak.net`)'
traefik.http.middlewares.api-retry.retry.attempts: '5'
traefik.http.middlewares.api-retry.retry.initialinterval: '100ms'
traefik.http.middlewares.api-cors.headers.accesscontrolallowmethods: '*'
Expand Down
29 changes: 29 additions & 0 deletions infrastructure/ansible/playbooks/code-runner/playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
- hosts: localhost
tasks:
- name: Check if inventory is empty.
fail:
msg: '[ERROR] Empty inventory. No host available.'
when: groups.all|length == 0

- hosts: web
remote_user: root # TODO: promini

pre_tasks:
- name: Update apt cache if needed.
become: true
apt:
update_cache: true
cache_valid_time: 3600

roles:
- role: geerlingguy.docker
become: true
vars:
docker_users:
- root # TODO: promini
- role: traefik
- role: code-runner
vars:
docker_image: ghcr.io/dump-hr/code-runner:latest
code_runner_domain: code-runner.bdeak.net
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
dependencies: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
- name: Generate random container suffix
set_fact:
container_name: "code-runner-{{ lookup('community.general.random_string', length=8, special=false, upper=false) }}"

- name: Create new code-runner docker container
docker_container:
name: '{{ container_name }}'
image: '{{ docker_image }}'
pull: true
restart_policy: unless-stopped
networks:
- name: traefiknet
labels:
traefik.enable: 'true'
traefik.http.routers.code-runner.rule: 'Host(`{{ code_runner_domain }}`)'
traefik.http.middlewares.code-runner-retry.retry.attempts: '5'
traefik.http.middlewares.code-runner-retry.retry.initialinterval: '100ms'
traefik.http.middlewares.code-runner-cors.headers.accesscontrolallowmethods: '*'
traefik.http.middlewares.code-runner-cors.headers.accesscontrolalloworiginlist: '*'
traefik.http.middlewares.code-runner-cors.headers.accesscontrolmaxage: '100'
traefik.http.middlewares.code-runner-cors.headers.addvaryheader: 'true'
traefik.http.routers.code-runner.middlewares: 'code-runner-retry, code-runner-cors'
# Setting a service property ensures that the generated service name will be consistent between versions
traefik.http.services.code-runner.loadbalancer.server.scheme: 'http'

- name: Swap docker containers if new one is healthy
block:
- name: Check if code-runner docker container is healthy
docker_container_info:
name: '{{ container_name }}'
register: code_runner
until: code_runner.exists and code_runner.container.State.Health.Status != 'starting'
failed_when: code_runner.container.State.Health.Status != 'healthy'
retries: 20
delay: 5

- name: Remove old code-runner docker container
docker_container:
name: code-runner
state: absent

- name: Rename new code-runner docker container
shell: docker rename "{{ container_name }}" code-runner

rescue:
- name: Save unhealthy code-runner docker container logs
shell: docker logs "{{ container_name }}" | sed -e 's/\x1b\[[0-9;]*m//g' > "/home/{{ ansible_user }}/unhealthy-$(date +%s)-{{ container_name }}.log" 2>&1

- name: Remove new unhealthy code-runner docker container
docker_container:
name: '{{ container_name }}'
state: absent

- name: Return error
fail:
msg: New code-runner docker container is unhealthy
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
dependencies: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
- name: Create traefik docker network
docker_network:
name: traefiknet
state: present

- name: Create traefik docker container
docker_container:
name: traefik
image: traefik:v2.10
restart_policy: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=traefiknet"
- "--entrypoints.web.address=:80"
- "--accesslog=true"
ports:
- "80:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- name: traefiknet

0 comments on commit 7aab2fe

Please sign in to comment.