working with login and building inventory
This commit is contained in:
126
teardown.yml
Normal file
126
teardown.yml
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
# Removes only this project's resources, matched by name. It never calls
|
||||
# `podman system prune`, so unrelated containers, images and volumes on the
|
||||
# host are left untouched.
|
||||
- name: Remove the Star Citizen Inventory installation and its data
|
||||
hosts: webservers
|
||||
|
||||
vars:
|
||||
confirm_destroy: false
|
||||
container_pattern: '^(sc-inventory|sc-inv-verify|trade-hub[-_])'
|
||||
image_pattern: '^(localhost/)?(sc-inventory-|sc-inv-verify-|trade-hub[-_])'
|
||||
volume_pattern: '^(sc-inventory-data|pgdata|trade-hub_pgdata)$'
|
||||
network_pattern: '^(sc-inventory$|sc-inv-verify$)'
|
||||
|
||||
tasks:
|
||||
- name: Require explicit confirmation for a destructive run
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- confirm_destroy | bool
|
||||
fail_msg: >-
|
||||
Refusing to run. This deletes the containers, images, network and the
|
||||
PostgreSQL volume that holds every account and inventory. Re-run with:
|
||||
ansible-playbook teardown.yml -e confirm_destroy=true
|
||||
quiet: true
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Check whether podman is installed
|
||||
ansible.builtin.command: podman --version
|
||||
register: podman_check
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: End play when podman is absent
|
||||
ansible.builtin.meta: end_play
|
||||
when: podman_check.rc != 0
|
||||
|
||||
- name: List containers
|
||||
ansible.builtin.command: podman ps -a --format json
|
||||
register: existing_containers
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: Remove project containers
|
||||
containers.podman.podman_container:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop: >-
|
||||
{{ (existing_containers.stdout | from_json)
|
||||
| map(attribute='Names')
|
||||
| select('iterable')
|
||||
| flatten
|
||||
| unique
|
||||
| select('match', container_pattern)
|
||||
| list }}
|
||||
|
||||
- name: List images
|
||||
ansible.builtin.command: podman images --format json
|
||||
register: existing_images
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: Remove project images (every tag, including stale builds)
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- podman
|
||||
- rmi
|
||||
- --force
|
||||
- "{{ item }}"
|
||||
loop: >-
|
||||
{{ (existing_images.stdout | from_json)
|
||||
| selectattr('Names', 'defined')
|
||||
| selectattr('Names', 'iterable')
|
||||
| map(attribute='Names')
|
||||
| flatten
|
||||
| unique
|
||||
| select('match', image_pattern)
|
||||
| list }}
|
||||
failed_when: false
|
||||
|
||||
- name: List volumes
|
||||
ansible.builtin.command: podman volume ls --format json
|
||||
register: existing_volumes
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: Remove the database volume (all accounts and inventories)
|
||||
containers.podman.podman_volume:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop: >-
|
||||
{{ (existing_volumes.stdout | from_json)
|
||||
| map(attribute='Name')
|
||||
| unique
|
||||
| select('match', volume_pattern)
|
||||
| list }}
|
||||
|
||||
- name: List networks
|
||||
ansible.builtin.command: podman network ls --format json
|
||||
register: existing_networks
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: Remove project networks
|
||||
containers.podman.podman_network:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
loop: >-
|
||||
{{ (existing_networks.stdout | from_json)
|
||||
| map(attribute='name')
|
||||
| unique
|
||||
| select('match', network_pattern)
|
||||
| list }}
|
||||
|
||||
- name: Verify nothing from this project remains
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
set -eu
|
||||
c=$(podman ps -a --format '{% raw %}{{ .Names }}{% endraw %}' | grep -Ec '^(sc-inventory|sc-inv-verify|trade-hub[-_])' || true)
|
||||
i=$(podman images --format '{% raw %}{{ .Names }}{% endraw %}' | grep -Ec '^(localhost/)?(sc-inventory-|sc-inv-verify-|trade-hub[-_])' || true)
|
||||
v=$(podman volume ls --format '{% raw %}{{ .Name }}{% endraw %}' | grep -Ec '^(sc-inventory-data|pgdata|trade-hub_pgdata)$' || true)
|
||||
n=$(podman network ls --format '{% raw %}{{ .Name }}{% endraw %}' | grep -Ec '^(sc-inventory|sc-inv-verify)$' || true)
|
||||
echo "remaining: containers=$c images=$i volumes=$v networks=$n"
|
||||
[ "$c" -eq 0 ] && [ "$i" -eq 0 ] && [ "$v" -eq 0 ] && [ "$n" -eq 0 ]
|
||||
changed_when: false
|
||||
when: not ansible_check_mode
|
||||
Reference in New Issue
Block a user