#!/usr/bin/env bash # Function to create symlink for snapshots create_symlink() { local osname="$1" local release="$2" local repository="$3" local basepath="$4" local label="$5" # 'monthly', 'weekly', or 'daily' local date_format="$6" # Date format for finding the snapshot # The path where snapshots are stored local snap_path="${basepath}/snap/${osname}/${release}/${repository}-${date_format}" # The target path for the symlink local symlink_target="${basepath}/snap/${osname}/${release}/${repository}-${label}" # Check if the source directory exists if [[ -d "$snap_path" ]]; then # Create the symlink, overwrite if it already exists ln -sfn "$snap_path" "$symlink_target" echo "Symlink created for $snap_path -> $symlink_target" else echo "Snapshot path does not exist: $snap_path" return 1 fi } # Determine which snapshot to promote based on the passed argument case "$1" in monthly) promote_date=$(date --date="$(date +%Y%m01) -1 month" +%Y%m%d) ;; weekly) promote_date=$(date --date="last Sunday" +%Y%m%d) ;; daily) promote_date=$(date --date="yesterday" +%Y%m%d) ;; *) echo "Usage: $0 {monthly|weekly|daily}" exit 1 ;; esac # Call the function with appropriate arguments # Iterate over the repositories to create symlinks for each for conf in /etc/reposync/conf.d/*.conf; do source "$conf" # Create symlink based on the provided argument create_symlink "$OSNAME" "$RELEASE" "$REPOSITORY" "$BASEPATH" "$1" "$promote_date" done