mirror of
https://pagure.io/fedora-infra/ansible.git
synced 2026-03-20 03:57:02 +08:00
forgejo: Add backup handling scripts to ansible role
Signed-off-by: David Kirwan <davidkirwanirl@gmail.com>
This commit is contained in:
12
roles/openshift-apps/forgejo/files/run_forgejo_backup.sh
Executable file
12
roles/openshift-apps/forgejo/files/run_forgejo_backup.sh
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
POD=`oc get pods -n forgejo --selector app.kubernetes.io/name=forgejo | awk '{print $1}' | grep forgejo`
|
||||
echo $POD
|
||||
oc -n forgejo rsync /root/ocp4/openshift-apps/forgejo/backups/script/ $POD:/tmp/
|
||||
|
||||
DUMP=`oc -n forgejo exec $POD sh /tmp/run_forgejo_dump.sh 2>&1 | tail -1`
|
||||
echo $DUMP
|
||||
oc -n forgejo rsync $POD:$DUMP /root/ocp4/openshift-apps/forgejo/backups/dump/
|
||||
|
||||
oc -n forgejo exec $POD sh /tmp/run_forgejo_cleanup.sh
|
||||
|
||||
91
roles/openshift-apps/forgejo/files/run_forgejo_pruning.sh
Executable file
91
roles/openshift-apps/forgejo/files/run_forgejo_pruning.sh
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Backup management script configuration
|
||||
BACKUP_DIR="/root/ocp4/openshift-apps/forgejo/backups/dump/" # Where backups are stored
|
||||
DAILY_RETENTION=7 # Keep 7 daily backups
|
||||
LOG_FILE="/root/ocp4/openshift-apps/forgejo/backups/log/forgejo_backup_prune.log"
|
||||
|
||||
# Logging function
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Ensure backup directory exists
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
# Check if script is run as root
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start pruning process
|
||||
log "Starting backup pruning process"
|
||||
|
||||
# Step 1: Keep the last 7 daily backups
|
||||
find "$BACKUP_DIR" -name "forgejo-dump-*.zip" -mtime +"$DAILY_RETENTION" -not -name "weekly*" -not -name "monthly*" -not -name "yearly*" -delete
|
||||
if [[ $? -eq 0 ]]; then
|
||||
log "Pruned daily backups older than ${DAILY_RETENTION} days"
|
||||
else
|
||||
log "Error pruning daily backups"
|
||||
fi
|
||||
|
||||
# Step 2: Weekly backup (run on Sundays)
|
||||
if [[ $(date +%u) -eq 7 ]]; then
|
||||
# Find the latest daily backup from this week
|
||||
LATEST_DAILY=$(find "$BACKUP_DIR" -name "forgejo-dump-*.zip" -not -name "weekly*" -not -name "monthly*" -not -name "yearly*" -printf "%T@ %p\n" | sort -nr | head -n 1 | cut -d' ' -f2)
|
||||
if [[ -n "$LATEST_DAILY" ]]; then
|
||||
EPOCH=$(basename "$LATEST_DAILY" | grep -o '[0-9]\{10,\}')
|
||||
WEEK_NUM=$(date +%U)
|
||||
NEW_NAME="weekly${WEEK_NUM}-forgejo-dump-${EPOCH}.zip"
|
||||
cp "$LATEST_DAILY" "${BACKUP_DIR}/${NEW_NAME}"
|
||||
log "Created weekly backup: ${NEW_NAME}"
|
||||
|
||||
# Prune other daily backups from this week
|
||||
WEEK_START=$(date -d "last Sunday" +%s)
|
||||
find "$BACKUP_DIR" -name "forgejo-dump-*.zip" -not -name "weekly*" -not -name "monthly*" -not -name "yearly*" -exec sh -c '[[ $(echo $(basename "{}") | grep -o "[0-9]\{10,\}") -ge '"$WEEK_START"' ]]' \; -delete
|
||||
log "Pruned other daily backups for week ${WEEK_NUM}"
|
||||
else
|
||||
log "No daily backup found for weekly processing"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Step 3: Monthly backup (run on last day of the month)
|
||||
if [[ $(date -d tomorrow +%d) -eq 1 ]]; then
|
||||
# Find the latest weekly backup
|
||||
LATEST_WEEKLY=$(find "$BACKUP_DIR" -name "weekly*-forgejo-dump-*.zip" -not -name "monthly*" -not -name "yearly*" -printf "%T@ %p\n" | sort -nr | head -n 1 | cut -d' ' -f2)
|
||||
if [[ -n "$LATEST_WEEKLY" ]]; then
|
||||
EPOCH=$(basename "$LATEST_WEEKLY" | grep -o '[0-9]\{10,\}')
|
||||
MONTH_NUM=$(date +%m)
|
||||
NEW_NAME="monthly${MONTH_NUM}-forgejo-dump-${EPOCH}.zip"
|
||||
cp "$LATEST_WEEKLY" "${BACKUP_DIR}/${NEW_NAME}"
|
||||
log "Created monthly backup: ${NEW_NAME}"
|
||||
|
||||
# Prune other weekly backups
|
||||
find "$BACKUP_DIR" -name "weekly*-forgejo-dump-*.zip" -not -name "monthly*" -not -name "yearly*" -delete
|
||||
log "Pruned other weekly backups"
|
||||
else
|
||||
log "No weekly backup found for monthly processing"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Step 4: Yearly backup (run on last day of the year)
|
||||
if [[ $(date -d tomorrow +%j) -eq 1 ]]; then
|
||||
# Find the latest monthly backup
|
||||
LATEST_MONTHLY=$(find "$BACKUP_DIR" -name "monthly*-forgejo-dump-*.zip" -not -name "yearly*" -printf "%T@ %p\n" | sort -nr | head -n 1 | cut -d' ' -f2)
|
||||
if [[ -n "$LATEST_MONTHLY" ]]; then
|
||||
EPOCH=$(basename "$LATEST_MONTHLY" | grep -o '[0-9]\{10,\}')
|
||||
YEAR=$(date +%Y)
|
||||
NEW_NAME="yearly${YEAR}-forgejo-dump-${EPOCH}.zip"
|
||||
cp "$LATEST_MONTHLY" "${BACKUP_DIR}/${NEW_NAME}"
|
||||
log "Created yearly backup: ${NEW_NAME}"
|
||||
|
||||
# Prune other monthly backups
|
||||
find "$BACKUP_DIR" -name "monthly*-forgejo-dump-*.zip" -not -name "yearly*" -delete
|
||||
log "Pruned other monthly backups"
|
||||
else
|
||||
log "No monthly backup found for yearly processing"
|
||||
fi
|
||||
fi
|
||||
|
||||
log "Backup pruning process completed"
|
||||
18
roles/openshift-apps/forgejo/files/script/import_sql_dump.sh
Executable file
18
roles/openshift-apps/forgejo/files/script/import_sql_dump.sh
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# sudo dnf install postgresql
|
||||
# psql $(oc -n forgejo get secrets forgejo-pguser -o go-template='{{.data.uri | base64decode}}')
|
||||
# psql --username=<db_user_name> databasename < data_base_dump
|
||||
|
||||
PG_CLUSTER_PRIMARY_POD=$(oc get pod \
|
||||
-n forgejo \
|
||||
-o name \
|
||||
-l postgres-operator.crunchydata.com/cluster=forgejo-ha,postgres-operator.crunchydata.com/role=master)
|
||||
|
||||
oc -n forgejo port-forward "${PG_CLUSTER_PRIMARY_POD}" 5432:5432
|
||||
|
||||
PGPASSWORD=$(oc get secrets -n forgejo "forgejo-pguser" -o go-template='{{.data.password | base64decode}}')
|
||||
PGUSER=$(oc get secrets -n forgejo "forgejo-pguser" -o go-template='{{.data.user | base64decode}}')
|
||||
PGDATABASE=$(oc get secrets -n forgejo "forgejo-pguser" -o go-template='{{.data.dbname | base64decode}}')
|
||||
|
||||
psql -h localhost
|
||||
3
roles/openshift-apps/forgejo/files/script/run_forgejo_cleanup.sh
Executable file
3
roles/openshift-apps/forgejo/files/script/run_forgejo_cleanup.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm /tmp/forgejo-dump*.zip
|
||||
8
roles/openshift-apps/forgejo/files/script/run_forgejo_dump.sh
Executable file
8
roles/openshift-apps/forgejo/files/script/run_forgejo_dump.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p /tmp/forgejo_dump
|
||||
cd /tmp/
|
||||
/usr/local/bin/forgejo dump --tempdir /tmp/forgejo_dump
|
||||
|
||||
DUMP=`ls -t forgejo-dump*.zip | head -n1 | grep forgejo`
|
||||
echo `realpath $DUMP`
|
||||
@@ -4,6 +4,37 @@
|
||||
path: "/root/ocp4/openshift-apps/forgejo/"
|
||||
state: directory
|
||||
|
||||
- name: Ensures forgejo backup directories exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
loop:
|
||||
- /root/ocp4/openshift-apps/forgejo/backups/
|
||||
- /root/ocp4/openshift-apps/forgejo/backups/script/
|
||||
- /root/ocp4/openshift-apps/forgejo/backups/dump/
|
||||
- /root/ocp4/openshift-apps/forgejo/backups/log/
|
||||
|
||||
- name: Copy forgejo backup scripts
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: /root/ocp4/openshift-apps/forgejo/backups/
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
with_fileglob:
|
||||
- run_forgejo_backup.sh
|
||||
- run_forgejo_pruning.sh
|
||||
|
||||
- name: Copy forgejo helper scripts
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: /root/ocp4/openshift-apps/forgejo/backups/script/
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
with_fileglob:
|
||||
- script/*.sh
|
||||
|
||||
- include_tasks: create-forgejo-namespace.yaml
|
||||
- include_tasks: create-forgejo-pvc.yaml
|
||||
- include_tasks: create-postgres-operator-config.yaml
|
||||
|
||||
Reference in New Issue
Block a user