From 935ae15ef3d2f1e5f3e2bf630bfb3075af89a885 Mon Sep 17 00:00:00 2001 From: Yi-Ting Shih Date: Thu, 10 Apr 2025 03:04:46 +0800 Subject: [PATCH] Refactor(judgehost): add kotlin support --- playbooks/judgehost.yml | 4 +- roles/configure_judgehost/handlers/main.yml | 14 ++-- .../tasks/configure.yml | 3 +- .../tasks/download.yml | 0 roles/configure_judgehost/tasks/main.yml | 76 +++---------------- .../handlers/main.yml | 12 +++ .../configure_judgehost_docker/tasks/main.yml | 68 +++++++++++++++++ .../templates/docker-compose.yml.jinja | 0 .../handlers/main.yml | 14 ---- .../configure_judgehost_legacy/tasks/main.yml | 10 --- 10 files changed, 101 insertions(+), 100 deletions(-) rename roles/{configure_judgehost_legacy => configure_judgehost}/tasks/configure.yml (98%) rename roles/{configure_judgehost_legacy => configure_judgehost}/tasks/download.yml (100%) create mode 100644 roles/configure_judgehost_docker/handlers/main.yml create mode 100644 roles/configure_judgehost_docker/tasks/main.yml rename roles/{configure_judgehost => configure_judgehost_docker}/templates/docker-compose.yml.jinja (100%) delete mode 100644 roles/configure_judgehost_legacy/handlers/main.yml delete mode 100644 roles/configure_judgehost_legacy/tasks/main.yml diff --git a/playbooks/judgehost.yml b/playbooks/judgehost.yml index f94c7d3..9e02e3f 100644 --- a/playbooks/judgehost.yml +++ b/playbooks/judgehost.yml @@ -3,5 +3,5 @@ hosts: judgehost roles: - role: install_packages_debian - - role: configure_judgehost_legacy - # - role: configure_judgehost + # - role: configure_judgehost_docker + - role: configure_judgehost diff --git a/roles/configure_judgehost/handlers/main.yml b/roles/configure_judgehost/handlers/main.yml index 1d8d1d6..e339c4a 100644 --- a/roles/configure_judgehost/handlers/main.yml +++ b/roles/configure_judgehost/handlers/main.yml @@ -1,12 +1,14 @@ --- -- name: Reboot - ansible.builtin.reboot: {} - name: Update grub ansible.builtin.command: | update-grub changed_when: true -- name: Restart judgehost docker compose - community.docker.docker_compose_v2: - project_src: "{{ domjudge_base_dir }}" +- name: Reboot + ansible.builtin.reboot: +- name: Systemd daemon-reload + ansible.builtin.systemd_service: + daemon_reload: true +- name: Restart judgehost + ansible.builtin.systemd_service: + name: domjudge-judgehost.target state: restarted - remove_orphans: true diff --git a/roles/configure_judgehost_legacy/tasks/configure.yml b/roles/configure_judgehost/tasks/configure.yml similarity index 98% rename from roles/configure_judgehost_legacy/tasks/configure.yml rename to roles/configure_judgehost/tasks/configure.yml index 6eaff03..9026705 100644 --- a/roles/configure_judgehost_legacy/tasks/configure.yml +++ b/roles/configure_judgehost/tasks/configure.yml @@ -78,8 +78,9 @@ group: root - name: Run misc-tools/dj_make_chroot + tags: [chroot] ansible.builtin.command: | - ./misc-tools/dj_make_chroot -y + ./misc-tools/dj_make_chroot -y -i kotlin args: chdir: "{{ domjudge_base_dir }}" creates: /chroot/domjudge diff --git a/roles/configure_judgehost_legacy/tasks/download.yml b/roles/configure_judgehost/tasks/download.yml similarity index 100% rename from roles/configure_judgehost_legacy/tasks/download.yml rename to roles/configure_judgehost/tasks/download.yml diff --git a/roles/configure_judgehost/tasks/main.yml b/roles/configure_judgehost/tasks/main.yml index 8cfc8ee..3acf498 100644 --- a/roles/configure_judgehost/tasks/main.yml +++ b/roles/configure_judgehost/tasks/main.yml @@ -1,68 +1,10 @@ --- -- name: Add boot parameters (Archlinux) - ansible.builtin.lineinfile: - path: /boot/loader/entries/arch.conf - line: >- - options cgroup_enable=memory - notify: Reboot - when: ansible_facts['distribution'] == "Archlinux" -- name: Add boot parameters (Debian) - ansible.builtin.lineinfile: - path: /etc/default/grub - regexp: '^GRUB_CMDLINE_LINUX_DEFAULT=' - line: >- - GRUB_CMDLINE_LINUX_DEFAULT="quiet - cgroup_enable=memory swapaccount=1 isolcpus=0 - systemd.unified_cgroup_hierarchy=0" - notify: - - Update grub - - Reboot - when: ansible_facts['distribution'] == "Debian" -- 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 - delegate_to: "{{ groups['domserver'] | first }}" - run_once: true - register: fetch_reg -- name: Set judgehost facts - ansible.builtin.set_fact: - domserver_url: "{{ domserver_url }}" - judgehost_password: "{{ fetch_reg['stdout'] }}" - run_once: true -- 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 }}" +- name: Add domjudge user + ansible.builtin.user: + name: domjudge + create_home: true +- name: Import domjudge download + ansible.builtin.import_tasks: download.yml +- name: Import domjudge configure + ansible.builtin.import_tasks: configure.yml + notify: Restart judgehost diff --git a/roles/configure_judgehost_docker/handlers/main.yml b/roles/configure_judgehost_docker/handlers/main.yml new file mode 100644 index 0000000..1d8d1d6 --- /dev/null +++ b/roles/configure_judgehost_docker/handlers/main.yml @@ -0,0 +1,12 @@ +--- +- name: Reboot + ansible.builtin.reboot: {} +- name: Update grub + ansible.builtin.command: | + update-grub + changed_when: true +- 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_docker/tasks/main.yml b/roles/configure_judgehost_docker/tasks/main.yml new file mode 100644 index 0000000..8cfc8ee --- /dev/null +++ b/roles/configure_judgehost_docker/tasks/main.yml @@ -0,0 +1,68 @@ +--- +- name: Add boot parameters (Archlinux) + ansible.builtin.lineinfile: + path: /boot/loader/entries/arch.conf + line: >- + options cgroup_enable=memory + notify: Reboot + when: ansible_facts['distribution'] == "Archlinux" +- name: Add boot parameters (Debian) + ansible.builtin.lineinfile: + path: /etc/default/grub + regexp: '^GRUB_CMDLINE_LINUX_DEFAULT=' + line: >- + GRUB_CMDLINE_LINUX_DEFAULT="quiet + cgroup_enable=memory swapaccount=1 isolcpus=0 + systemd.unified_cgroup_hierarchy=0" + notify: + - Update grub + - Reboot + when: ansible_facts['distribution'] == "Debian" +- 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 + delegate_to: "{{ groups['domserver'] | first }}" + run_once: true + register: fetch_reg +- name: Set judgehost facts + ansible.builtin.set_fact: + domserver_url: "{{ domserver_url }}" + judgehost_password: "{{ fetch_reg['stdout'] }}" + run_once: true +- 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_docker/templates/docker-compose.yml.jinja similarity index 100% rename from roles/configure_judgehost/templates/docker-compose.yml.jinja rename to roles/configure_judgehost_docker/templates/docker-compose.yml.jinja diff --git a/roles/configure_judgehost_legacy/handlers/main.yml b/roles/configure_judgehost_legacy/handlers/main.yml deleted file mode 100644 index e339c4a..0000000 --- a/roles/configure_judgehost_legacy/handlers/main.yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -- name: Update grub - ansible.builtin.command: | - update-grub - changed_when: true -- name: Reboot - ansible.builtin.reboot: -- name: Systemd daemon-reload - ansible.builtin.systemd_service: - daemon_reload: true -- name: Restart judgehost - ansible.builtin.systemd_service: - name: domjudge-judgehost.target - state: restarted diff --git a/roles/configure_judgehost_legacy/tasks/main.yml b/roles/configure_judgehost_legacy/tasks/main.yml deleted file mode 100644 index 3acf498..0000000 --- a/roles/configure_judgehost_legacy/tasks/main.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Add domjudge user - ansible.builtin.user: - name: domjudge - create_home: true -- name: Import domjudge download - ansible.builtin.import_tasks: download.yml -- name: Import domjudge configure - ansible.builtin.import_tasks: configure.yml - notify: Restart judgehost