--- # Copies services// to the server and renders the files that # used to be generated by OpenTofu (services//.env and, for dev, # Runners/docker-compose.yml) - replaces the null_resource.deploy_services + # local_file provisioners previously in infra/modules//main.tf. - name: Ensure services directory exists on the host ansible.builtin.file: path: "/home/{{ deploy_user }}/services/{{ service_group }}" state: directory mode: "0755" - name: Copy static service files (compose files, scripts, configs) ansible.builtin.copy: src: "{{ services_root }}/{{ service_group }}/" dest: "/home/{{ deploy_user }}/services/{{ service_group }}/" mode: preserve - name: Look up this host's data volume when: service_group in ['dev', 'prod'] delegate_to: localhost become: false hetzner.hcloud.hcloud_volume_info: api_token: "{{ hcloud_token }}" name: "{{ service_group }}-storage" register: _volume_info # Hetzner's automount tooling always mounts an auto-mounted volume at # /mnt/HC_Volume_ - deterministic once the volume exists. - name: Compute DATA_DIR from the volume's id when: service_group in ['dev', 'prod'] ansible.builtin.set_fact: data_dir: "/mnt/HC_Volume_{{ _volume_info.hcloud_volume_info[0].id }}" - name: Render DATA_DIR into .env (auto-loaded by docker compose) when: service_group in ['dev', 'prod'] ansible.builtin.template: src: env.j2 dest: "/home/{{ deploy_user }}/services/{{ service_group }}/.env" mode: "0644" - name: Render Gitea Actions runner compose file when: service_group == 'dev' ansible.builtin.template: src: runners-docker-compose.yml.j2 dest: "/home/{{ deploy_user }}/services/dev/Runners/docker-compose.yml" mode: "0644" - name: Make spinup/spindown scripts executable ansible.builtin.file: path: "/home/{{ deploy_user }}/services/{{ service_group }}/{{ item }}" mode: "0755" loop: - spinup.sh - spindown.sh