runner

Ansible role that deployes services on my runner machine

3.5 KBYML
cvat.yml
3.5 KB111 lines • yaml
1---
2
3- name: Clone CVAT upstream at pinned version
4  git:
5    repo: "{{ cvat_repo_url }}"
6    dest: "{{ cvat_config_dir }}"
7    version: "{{ cvat_repo_version }}"
8    force: yes
9
10- name: Set ownership on CVAT install dir
11  file:
12    path: "{{ cvat_config_dir }}"
13    state: directory
14    owner: "{{ runner_user }}"
15    group: "{{ runner_group }}"
16    mode: '2775'
17    recurse: true
18
19- name: Check CVAT share dir exists
20  stat:
21    path: "{{ cvat_share_dir }}"
22  register: cvat_share_stat
23
24- name: Fail if CVAT share dir missing
25  fail:
26    msg: "CVAT share {{ cvat_share_dir }} not found. Ensure NFS mounts ran first."
27  when: not cvat_share_stat.stat.exists
28
29- name: Write .env for compose
30  template:
31    src: "cvat.env.j2"
32    dest: "{{ cvat_config_dir }}/.env"
33    owner: "{{ runner_user }}"
34    group: "{{ runner_group }}"
35    mode: '0664'
36
37- name: Write CVAT compose override
38  template:
39    src: "cvat-docker-compose.override.yml.j2"
40    dest: "{{ cvat_config_dir }}/docker-compose.override.yml"
41    owner: "{{ runner_user }}"
42    group: "{{ runner_group }}"
43    mode: '0664'
44
45- name: Build compose file list
46  set_fact:
47    cvat_compose_files: >-
48      {{ [ 'docker-compose.yml' ]
49         + (cvat_https_enabled        | ternary(['docker-compose.https.yml'], []))
50         + (cvat_serverless_enabled   | ternary(['components/serverless/docker-compose.serverless.yml'], []))
51         + (cvat_external_db_enabled  | ternary(['docker-compose.external_db.yml'], []))
52         + ['docker-compose.override.yml'] }}
53
54- name: Show compose files being used
55  debug:
56    var: cvat_compose_files
57
58- name: Pull CVAT images
59  community.docker.docker_compose_v2:
60    project_src: "{{ cvat_config_dir }}"
61    files: "{{ cvat_compose_files }}"
62    pull: always
63    state: present
64  register: cvat_pull_result
65
66- name: Start CVAT
67  community.docker.docker_compose_v2:
68    project_src: "{{ cvat_config_dir }}"
69    files: "{{ cvat_compose_files }}"
70    state: present
71    remove_orphans: true
72  register: cvat_start_result
73
74- name: Wait for CVAT health_check
75  command: docker exec -t cvat_server python manage.py health_check
76  register: cvat_hc
77  retries: 20
78  delay: 6
79  until: cvat_hc.rc == 0
80  changed_when: false
81  failed_when: cvat_hc.rc != 0
82
83- name: Bootstrap CVAT admin superuser
84  when: cvat_bootstrap_admin | default(true)
85  shell: |
86    docker exec -i cvat_server bash -lc "python3 - <<'PY'
87    from django.contrib.auth import get_user_model
88    User = get_user_model()
89    u='{{ cvat_admin_username | default("admin") }}'
90    e='{{ cvat_admin_email | default("[email protected]") }}'
91    p='{{ cvat_admin_password | default("ChangeMe!123") }}'
92    if not User.objects.filter(username=u).exists():
93        User.objects.create_superuser(u, e, p)
94    PY"
95  args:
96    executable: /bin/bash
97  changed_when: false
98
99- name: Display CVAT deployment summary
100  debug:
101    msg: |
102      CVAT Deployment:
103      - Status: {{ 'Updated' if (cvat_pull_result.changed or cvat_start_result.changed) else 'Already running' }}
104      - URL: {{ (cvat_https_enabled | default(false)) | ternary('https','http') }}://{{ cvat_domain }}{{ (cvat_https_enabled | default(false)) | ternary('', ':' ~ cvat_http_port | default(':8080')) }}
105      - Repo: {{ cvat_repo_url }} @ {{ cvat_repo_version }}
106      - Images: CVAT_VERSION={{ cvat_image_tag }}
107      - NAS Share (host): {{ cvat_share_dir }}  →  (in-container): /home/django/share
108      - Compose files: {{ cvat_compose_files | join(', ') }}
109      - Admin User: {{ cvat_admin_username | default('admin') }}
110
111