/
/
/
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