From aff00e56ad307c27201f549d4659895f60e6c597 Mon Sep 17 00:00:00 2001 From: Yi-Ting Shih Date: Sun, 6 Apr 2025 20:45:24 +0800 Subject: [PATCH] Feat(judgehost): test judgehost --- group_vars/all/main.yml | 3 ++ group_vars/domserver/main.yml | 1 - roles/configure_judgehost/handlers/main.yml | 6 +++ roles/configure_judgehost/tasks/main.yml | 46 +++++++++++++++++++ .../templates/docker-compose.yml.jinja | 12 +++++ 5 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 group_vars/all/main.yml create mode 100644 roles/configure_judgehost/handlers/main.yml create mode 100644 roles/configure_judgehost/templates/docker-compose.yml.jinja diff --git a/group_vars/all/main.yml b/group_vars/all/main.yml new file mode 100644 index 0000000..a48620b --- /dev/null +++ b/group_vars/all/main.yml @@ -0,0 +1,3 @@ +--- +domjudge_base_dir: /opt/domjudge/midterm +domserver_url: https://cp1.konchin.com diff --git a/group_vars/domserver/main.yml b/group_vars/domserver/main.yml index bd6c46d..a1ad432 100644 --- a/group_vars/domserver/main.yml +++ b/group_vars/domserver/main.yml @@ -1,4 +1,3 @@ --- -domjudge_base_dir: /opt/domjudge/midterm mariadb_version: 11.7.2 domserver_version: 8.3.1 diff --git a/roles/configure_judgehost/handlers/main.yml b/roles/configure_judgehost/handlers/main.yml new file mode 100644 index 0000000..6d4e549 --- /dev/null +++ b/roles/configure_judgehost/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Restart judgehost docker compose + community.docker.docker_compose_v2: + project_src: "{{ domjudge_base_dir }}" + state: restarted + remove_orphans: true diff --git a/roles/configure_judgehost/tasks/main.yml b/roles/configure_judgehost/tasks/main.yml index 98475e0..49b7d42 100644 --- a/roles/configure_judgehost/tasks/main.yml +++ b/roles/configure_judgehost/tasks/main.yml @@ -7,3 +7,49 @@ cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0 + notify: Reboot +- name: Flush handlers + ansible.builtin.meta: flush_handlers + +- name: Fetch judgehost password + community.docker.docker_compose_v2_exec: + project_src: "{{ domjudge_base_dir }}" + service: domserver + command: >- + sed -nr 's/^.*\W+judgehost\W+(.+)$/\1/p' + /opt/domjudge/domserver/etc/restapi.secret + register: fetch_reg +- name: Set judgehost facts + ansible.builtin.set_fact: + domserver_url: "{{ domserver_url }}" + judgehost_password: "{{ fetch_reg['stdout'] }}" +- name: Show judgehost password + ansible.builtin.debug: + var: judgehost_password + +- name: Install judgehost directory + ansible.builtin.file: + path: "{{ domjudge_base_dir }}" + state: directory + mode: '0750' + owner: root + group: docker +- name: Install judgehost docker compose + notify: + - Restart judgehost docker compose + block: + - name: Install docker-compose.yml + ansible.builtin.template: + src: docker-compose.yml.jinja + dest: "{{ domjudge_base_dir }}/docker-compose.yml" + mode: '0644' + owner: root + group: root +- name: Enable and start docker + ansible.builtin.systemd_service: + name: docker.service + state: started + enabled: true +- name: Run docker compose up + community.docker.docker_compose_v2: + project_src: "{{ domjudge_base_dir }}" diff --git a/roles/configure_judgehost/templates/docker-compose.yml.jinja b/roles/configure_judgehost/templates/docker-compose.yml.jinja new file mode 100644 index 0000000..a0eee7d --- /dev/null +++ b/roles/configure_judgehost/templates/docker-compose.yml.jinja @@ -0,0 +1,12 @@ +services: + judgehost: + image: domjudge/judgehost:{{ judgehost_version }} + privileged: true + environment: + DAEMON_ID: 0 + DOMSERVER_BASEURL: {{ domserver_url }} + JUDGEDAEMON_USERNAME: judgehost + JUDGEDAEMON_PASSWORD: {{ judgehost_password }} + DOMJUDGE_CREATE_WRITABLE_TEMP_DIR: 1 + CONTAINER_TIMEZONE: Asia/Taipei + restart: always