37 lines
1.5 KiB
YAML
37 lines
1.5 KiB
YAML
---
|
|
# Converges one app (one loop iteration of `app` from playbooks/k3s.yml) to
|
|
# the state its k3s_apps: entry asks for.
|
|
#
|
|
# `state: present` (the default) deploys; `state: absent` tears down. Same
|
|
# explicit-removal rule as compose_stack, and for the same reason: Ansible
|
|
# keeps no record of what it deployed last run, so deleting an app from
|
|
# `k3s_apps:` only stops the loop visiting it — the workload keeps running,
|
|
# unmanaged, until something says `absent`. The entry stays as a tombstone.
|
|
#
|
|
# Unlike compose_stack, removal here does tear the workload down completely
|
|
# on the first pass, because k3s's deploy controller owns the resources a
|
|
# manifest created and garbage-collects them when the file goes away. What
|
|
# it does *not* touch, by the same "a default teardown should be
|
|
# reversible" reasoning compose_stack applies: the app's database, its
|
|
# PersistentVolumeClaims, and its Vault path.
|
|
|
|
- name: Set app facts
|
|
ansible.builtin.set_fact:
|
|
app_local_dir: "{{ repo_root }}/src/{{ app.src }}"
|
|
app_state: "{{ app.state | default('present') }}"
|
|
|
|
- name: Validate requested app state
|
|
ansible.builtin.assert:
|
|
that: app_state in ['present', 'absent']
|
|
fail_msg: >-
|
|
App '{{ app.name }}' has state '{{ app_state }}'; expected 'present'
|
|
or 'absent'.
|
|
quiet: true
|
|
|
|
- name: Deploy app
|
|
ansible.builtin.include_tasks: deploy.yml
|
|
when: app_state == 'present'
|
|
|
|
- name: Remove app
|
|
ansible.builtin.include_tasks: remove.yml
|
|
when: app_state == 'absent'
|