working with login and building inventory

This commit is contained in:
2026-11-12 11:40:31 -07:00
parent d11e5e70c7
commit 0a93925e11
45 changed files with 2389 additions and 77 deletions

126
teardown.yml Normal file
View 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