132 lines
4.1 KiB
YAML

---
- name: Check if YT-DLP master deployment directory exists
stat:
path: "{{ airflow_master_dir }}"
register: master_dir_stat
- name: Ensure YT-DLP master deployment directory exists
file:
path: "{{ airflow_master_dir }}"
state: directory
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
mode: '0755'
become: yes
when: not master_dir_stat.stat.exists
- name: Ensure YT-DLP master configs directory exists
file:
path: "{{ airflow_master_dir }}/configs"
state: directory
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
mode: '0755'
become: yes
- name: "Log: Syncing YT-DLP service files"
debug:
msg: "Syncing YT-DLP service components (config generator, envoy/camoufox templates) to the master node."
- name: Sync YT-DLP config generator to master
synchronize:
src: "../airflow/generate_envoy_config.py"
dest: "{{ airflow_master_dir }}/"
archive: yes
rsync_path: "sudo rsync"
rsync_opts: "{{ rsync_default_opts }}"
- name: Sync YT-DLP config files to master
synchronize:
src: "../airflow/configs/{{ item }}"
dest: "{{ airflow_master_dir }}/configs/"
archive: yes
recursive: yes
rsync_path: "sudo rsync"
rsync_opts: "{{ rsync_default_opts }}"
loop:
- "docker-compose-ytdlp-ops.yaml.j2"
- "docker-compose.config-generate.yaml"
- "envoy.yaml.j2"
- name: Create .env file for YT-DLP master service
template:
src: "../../templates/.env.j2"
dest: "{{ airflow_master_dir }}/.env"
mode: "{{ file_permissions }}"
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
become: yes
vars:
service_role: "management"
server_identity: "ytdlp-ops-service-mgmt"
- name: Template docker-compose file for YT-DLP master service
template:
src: "../airflow/configs/docker-compose-ytdlp-ops.yaml.j2"
dest: "{{ airflow_master_dir }}/configs/docker-compose-ytdlp-ops.yaml"
mode: "{{ file_permissions }}"
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
become: yes
vars:
service_role: "management"
- name: "Log: Generating YT-DLP service configurations"
debug:
msg: "Running the configuration generator script inside a temporary Docker container. This creates docker-compose and envoy files based on .env variables."
- name: Ensure envoy.yaml is removed before generation
file:
path: "{{ airflow_master_dir }}/envoy.yaml"
state: absent
become: yes
- name: Generate YT-DLP service configurations
shell:
cmd: "docker compose --project-directory . --env-file .env -f configs/docker-compose.config-generate.yaml run --rm config-generator"
chdir: "{{ airflow_master_dir }}"
become: yes
become_user: "{{ ssh_user }}"
- name: Pull YT-DLP service image
community.docker.docker_image:
name: "{{ ytdlp_ops_image }}"
source: pull
when: not fast_deploy | default(false)
- name: Ensure correct permissions for build context after generation
file:
path: "{{ airflow_master_dir }}"
state: directory
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
recurse: yes
become: yes
- name: Create dummy camoufox compose file for master to prevent errors
copy:
content: |
# This is a placeholder file.
# The master node does not run Camoufox, but the shared docker-compose-ytdlp-ops.yaml
# may unconditionally include this file, causing an error if it's missing.
# This file provides an empty services block to satisfy the include.
services: {}
dest: "{{ airflow_master_dir }}/configs/docker-compose.camoufox.yaml"
mode: "{{ file_permissions }}"
owner: "{{ ssh_user }}"
group: "{{ deploy_group }}"
become: yes
- name: "Log: Starting YT-DLP management service"
debug:
msg: "Starting the YT-DLP management service on the master node. This service handles account and proxy management."
- name: Start YT-DLP master service
community.docker.docker_compose_v2:
project_src: "{{ airflow_master_dir }}"
files:
- "configs/docker-compose-ytdlp-ops.yaml"
state: present
remove_orphans: true
pull: "{{ 'never' if fast_deploy | default(false) else 'missing' }}"