~comcloudway/ansible-ccw.icu

85cc374bae3b67cc29641800f77e20b8560942a7 — Jakob Meier 3 months ago 77f8655 main
containers/forgejo-runner: allow defining multiple runners

XXX: this breaks the old config syntax
M roles/containers/forgejo-runner/README.org => roles/containers/forgejo-runner/README.org +6 -3
@@ 6,7 6,10 @@ you probably want to set/edit the following variables
in your ~secret.yml~ (or your unencrypted config):
#+begin_src yaml
forgejo_runner_project_dir: "forgejo-runner"
forgejo_runner_token: "changeme"
forgejo_runner_name: "runner"
forgejo_runner_instance: "https://codeberg.org/"
forgejo_runner_list:
  default:
    token: "changeme"
    instance: "https://codeberg.org"
#+end_src

You can define more runners, by choosing an id and setting the `token` and `instance` key for it.

M roles/containers/forgejo-runner/defaults/main.yml => roles/containers/forgejo-runner/defaults/main.yml +4 -3
@@ 1,5 1,6 @@
---
forgejo_runner_project_dir: "forgejo-runner"
forgejo_runner_token: "changeme"
forgejo_runner_name: "runner"
forgejo_runner_instance: "https://codeberg.org/"
forgejo_runner_list:
  default:
    token: "changeme"
    instance: "https://codeberg.org"

M roles/containers/forgejo-runner/tasks/setup.yml => roles/containers/forgejo-runner/tasks/setup.yml +24 -8
@@ 5,27 5,43 @@
    state: directory
    recurse: true

- name: Ensure the subdirectories for each runner exist
  ansible.builtin.file:
    path: "{{ container_dir }}/{{ forgejo_runner_project_dir }}/{{ item.key }}"
    state: directory
    recurse: true
  loop: "{{ forgejo_runner_list | dict2items }}"

- name: Check if we have already generated config files for the runners
  ansible.builtin.stat:
    path: "{{ container_dir }}/{{ forgejo_runner_project_dir }}/{{ item.key }}/.runner"
  loop: "{{ forgejo_runner_list | dict2items }}"
  register: list

- name: Create forgejo-runner registration
  community.docker.docker_container:
    name: forgejo-runner-bootstrap
    name: "forgejo-runner-{{ item.item.key }}-bootstrap"
    image: code.forgejo.org/forgejo/runner:2.3.0
    working_dir: "/data"
    command: "register \
      --no-interactive \
      --token {{ forgejo_runner_token }} \
      --name {{ forgejo_runner_name }} \
      --instance {{ forgejo_runner_instance }}
      --token {{ item.item.value.token }} \
      --name {{ item.item.key }} \
      --instance {{ item.item.value.instance }}
      --labels docker"
    volumes:
      - "{{ container_dir }}/{{ forgejo_runner_project_dir }}/:/data"
      - "{{ container_dir }}/{{ forgejo_runner_project_dir }}/{{ item.item.key }}/:/data"
  when: not item.stat.exists
  loop: "{{ list.results }}"

- name: Setup forgejo-runner
- name: Start forgejo-runners
  community.docker.docker_container:
    name: forgejo-runner
    name: "forgejo-runner-{{ item.key }}"
    image: code.forgejo.org/forgejo/runner:2.3.0
    working_dir: "/data"
    restart_policy: unless-stopped
    command: daemon
    volumes:
      - "{{ container_dir }}/{{ forgejo_runner_project_dir }}/:/data"
      - "{{ container_dir }}/{{ forgejo_runner_project_dir }}/{{ item.key }}:/data"
      - /var/run/docker.sock:/var/run/docker.sock
  loop: "{{ forgejo_runner_list | dict2items }}"