--- # Serves node/vite static builds (dta_webapp beta/prod) via a single nginx # container. Skips itself on hosts that have no node-static apps. - name: web-static | node-static app names ansible.builtin.set_fact: _node_names: "{{ app_catalog | dict2items | selectattr('value.type', 'equalto', 'node-static') | map(attribute='key') | list }}" - name: web-static | this host's static apps ansible.builtin.set_fact: _static_apps: "{{ host_apps | default([]) | selectattr('name', 'in', _node_names) | list }}" - name: web-static | configure and run when: _static_apps | length > 0 block: - name: web-static | ensure project dir ansible.builtin.file: path: "{{ web_static_dir }}" state: directory owner: "{{ admin_user }}" group: "{{ admin_user }}" mode: "0750" - name: web-static | nginx config ansible.builtin.template: src: nginx.conf.j2 dest: "{{ web_static_dir }}/nginx.conf" owner: "{{ admin_user }}" group: "{{ admin_user }}" mode: "0644" register: _nginx_conf - name: web-static | compose file ansible.builtin.template: src: docker-compose.yml.j2 dest: "{{ web_static_dir }}/docker-compose.yml" owner: "{{ admin_user }}" group: "{{ admin_user }}" mode: "0644" register: _compose_file - name: web-static | start container ansible.builtin.command: cmd: "docker compose up -d --remove-orphans{{ ' --force-recreate' if (_compose_file is changed) else '' }}" chdir: "{{ web_static_dir }}" become: true become_user: "{{ admin_user }}" changed_when: true - name: web-static | reload nginx on config change ansible.builtin.command: cmd: "docker compose exec -T web-static nginx -s reload" chdir: "{{ web_static_dir }}" become: true become_user: "{{ admin_user }}" when: _nginx_conf is changed and _compose_file is not changed changed_when: true