playbooks/roles/vhosts/accounts_service/tasks/target.yml
2026-04-12 14:23:10 +08:00

110 lines
3.8 KiB
YAML

---
- name: Ensure compose directories exist for {{ accounts_service_target.name }}
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
loop:
- "{{ accounts_service_target.compose_dir }}"
- "{{ accounts_service_target.compose_dir }}/env"
- "{{ accounts_service_target.compose_dir }}/config"
- name: Check for managed env file for {{ accounts_service_target.name }}
ansible.builtin.stat:
path: "{{ accounts_service_target.env_file }}"
register: accounts_service_target_managed_env_stat
- name: Check for legacy env file for {{ accounts_service_target.name }}
ansible.builtin.stat:
path: "{{ accounts_service_target.legacy_env_file }}"
register: accounts_service_target_legacy_env_stat
- name: Seed managed env file from legacy deployment for {{ accounts_service_target.name }}
ansible.builtin.copy:
src: "{{ accounts_service_target.legacy_env_file }}"
dest: "{{ accounts_service_target.env_file }}"
remote_src: true
owner: root
group: root
mode: "0600"
when:
- not accounts_service_target_managed_env_stat.stat.exists
- accounts_service_target_legacy_env_stat.stat.exists
- name: Render managed env file from defaults for {{ accounts_service_target.name }}
ansible.builtin.template:
src: app.env.j2
dest: "{{ accounts_service_target.env_file }}"
owner: root
group: root
mode: "0600"
when:
- not accounts_service_target_managed_env_stat.stat.exists
- not accounts_service_target_legacy_env_stat.stat.exists
- name: Ensure managed CONFIG_TEMPLATE is present for {{ accounts_service_target.name }}
ansible.builtin.lineinfile:
path: "{{ accounts_service_target.env_file }}"
regexp: '^CONFIG_TEMPLATE='
line: 'CONFIG_TEMPLATE=/etc/xcontrol/account.template.yaml'
state: present
insertafter: '^CONFIG_PATH='
- name: Ensure managed CONFIG_PATH is present for {{ accounts_service_target.name }}
ansible.builtin.lineinfile:
path: "{{ accounts_service_target.env_file }}"
regexp: '^CONFIG_PATH='
line: 'CONFIG_PATH=/etc/xcontrol/account.yaml'
state: present
insertbefore: BOF
- name: Ensure managed IMAGE is present for {{ accounts_service_target.name }}
ansible.builtin.lineinfile:
path: "{{ accounts_service_target.env_file }}"
regexp: '^IMAGE='
line: 'IMAGE={{ accounts_service_image_ref }}'
state: present
insertafter: '^CONFIG_TEMPLATE='
- name: Render managed account config for {{ accounts_service_target.name }}
ansible.builtin.template:
src: account.yaml.j2
dest: "{{ accounts_service_target.config_file }}"
owner: root
group: root
mode: "0644"
- name: Render compose file for {{ accounts_service_target.name }}
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ accounts_service_target.compose_file }}"
owner: root
group: root
mode: "0644"
- name: Pull image for {{ accounts_service_target.name }}
ansible.builtin.command: docker compose -f "{{ accounts_service_target.compose_file }}" pull app
args:
chdir: "{{ accounts_service_target.compose_dir }}"
when: accounts_service_pull_image | bool
- name: Remove any container currently bound to {{ accounts_service_target.host_port }}
ansible.builtin.shell: |
set -euo pipefail
ids="$(docker ps --filter publish={{ accounts_service_target.host_port }} -q)"
if [ -z "${ids}" ]; then
exit 0
fi
docker rm -f ${ids}
args:
executable: /bin/bash
register: accounts_service_target_port_cleanup
changed_when: accounts_service_target_port_cleanup.stdout | trim != ""
- name: Start managed compose target for {{ accounts_service_target.name }}
ansible.builtin.command: docker compose -f "{{ accounts_service_target.compose_file }}" up -d --force-recreate --remove-orphans
args:
chdir: "{{ accounts_service_target.compose_dir }}"