42f7840c26
Extend the playbook metadata convention with a namespaced `# steward:<key>:` comment block: - steward:category — free-text grouping label, shown as a badge in the browse list and on the run form. - steward:confirm — true/yes/1/on marks a playbook destructive; the run form then requires a confirmation tick (required checkbox in the shared vars fragment) before it can launch. sources.discover_playbook_meta() parses description + category + confirm (first match per key; `# description:` still primary, `# steward:description:` alias). discover_playbook_description() now delegates to it. The browse list reads per-playbook meta to show category badges + descriptions; the run-form and playbook-vars fragments render the badge + confirm gate. Bundled playbooks tagged: docker_prune → category maintenance + confirm true; provision/install/update → category host-agent. Docs: docs/reference/playbook-authoring.md updated (keys now implemented) and a quick reference added next to the code at steward/ansible/PLAYBOOK_CONVENTIONS.md. Tests added for category/confirm/alias parsing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
30 lines
1.1 KiB
YAML
30 lines
1.1 KiB
YAML
---
|
|
# description: Reclaim disk on Docker / Swarm nodes by pruning unused images, containers, networks and build cache.
|
|
# steward:category: maintenance
|
|
# steward:confirm: true
|
|
# Reclaim disk on Docker / Docker Swarm nodes by removing unused data.
|
|
# Safe by default: prunes dangling images, stopped containers, unused networks
|
|
# and build cache. Set extra-vars to widen scope:
|
|
# prune_all_images=true also remove ALL unused images (not just dangling)
|
|
# prune_volumes=true also remove unused named volumes (data loss risk)
|
|
- name: Docker system prune
|
|
hosts: all
|
|
gather_facts: false
|
|
become: true
|
|
vars:
|
|
prune_all_images: false
|
|
prune_volumes: false
|
|
tasks:
|
|
- name: Run docker system prune
|
|
ansible.builtin.command:
|
|
argv: >-
|
|
{{ ['docker', 'system', 'prune', '-f']
|
|
+ (['-a'] if prune_all_images | bool else [])
|
|
+ (['--volumes'] if prune_volumes | bool else []) }}
|
|
register: prune_result
|
|
changed_when: "'Total reclaimed space: 0B' not in prune_result.stdout"
|
|
|
|
- name: Report reclaimed space
|
|
ansible.builtin.debug:
|
|
msg: "{{ prune_result.stdout_lines | select | list }}"
|