{ "slug": "docker-postgres-backup", "kind": "ansible", "metadata": { "name": "Docker Postgres Backup", "description": "Connects to a named PostgreSQL container and creates compressed SQL dumps with configurable retention. Supports optional Discord notifications on success or failure.", "tags": [ "docker", "backup", "postgres", "database" ], "icon": { "provider": "simple-icons", "id": "postgresql", "color": "emerald" }, "draft": true, "version": { "name": "1", "source_dep_name": "manual/docker-postgres-backup" } }, "variables": [ { "title": "Backup", "name": "backup", "items": [ { "name": "container_name", "type": "str", "title": "Container Name", "required": true }, { "name": "postgres_user", "type": "str", "title": "Postgres User", "required": false, "default": "postgres", "description": "Database user for pg_dump/pg_dumpall", "config": { "placeholder": "postgres" } }, { "name": "postgres_password", "type": "str", "title": "Postgres Password", "required": false, "default": "" }, { "name": "postgres_database", "type": "str", "title": "Database Name", "required": false, "default": "all", "description": "Database to dump, or 'all' for all databases", "config": { "placeholder": "all" } }, { "name": "backup_retention_days", "type": "int", "title": "Retention Days", "required": false, "default": 14, "description": "Delete backup archives older than this many days", "config": { "slider": true, "min": 1, "max": 365, "step": 1, "placeholder": "14", "unit": "days" } } ] }, { "title": "Notification", "name": "notification", "items": [ { "name": "send_discord_notification", "type": "bool", "title": "Send Discord Notification", "required": false, "default": false, "description": "Send success/failure status to Discord webhook" }, { "name": "discord_webhook", "type": "secret", "title": "Discord Webhook", "required": false, "default": "", "description": "Discord webhook URL for notifications" } ] }, { "title": "Internal", "name": "internal", "items": [ { "name": "backup_status", "type": "str", "title": "Backup Status", "required": false, "default": "" }, { "name": "inventory_hostname", "type": "str", "title": "Inventory Hostname", "required": false, "default": "" }, { "name": "backup_timestamp", "type": "str", "title": "Backup Timestamp", "required": false, "default": "" }, { "name": "item", "type": "str", "title": "Loop Item", "required": false, "default": "" }, { "name": "backup_file_path", "type": "str", "title": "Backup File Path", "required": false, "default": "" }, { "name": "old_backups", "type": "str", "title": "Old Backups", "required": false, "default": "" }, { "name": "backup_root", "type": "str", "title": "Backup Root", "required": false, "default": "/backups/postgres", "config": { "placeholder": "/backups/postgres" } }, { "name": "backup_file_name", "type": "str", "title": "Backup File Name", "required": false, "default": "" }, { "name": "ansible_failed_result", "type": "str", "title": "Failed Result", "required": false, "default": "" }, { "name": "backup_status_message", "type": "str", "title": "Backup Status Message", "required": false, "default": "", "config": { "textarea": true } } ] } ] }