#!/bin/bash GIT_REPO_PATH=$(mktemp -d) git config --global user.email "$GIT_USER_MAIL" git config --global user.name "$GIT_USERNAME" echo "[INFO] check variables..." if [ -z "$GIT_REPO_DEPLOY_KEY" ] ; then echo "[ERROR] \$GIT_REPO_DEPLOY_KEY is not set." exit 3 fi if [ -z "$GIT_REPO_URL" ] ; then echo "[ERROR] \$GIT_REPO_URL is not set." exit 3 fi if [ -z "$INTERVAL" ] ; then echo "[ERROR] \$INTERVAL is not set." exit 3 fi if [ -z "$GIT_REPO_BRANCH" ] ; then echo "[ERROR] \$GIT_REPO_BRANCH is not set." exit 3 fi if [ -z "$GIT_USERNAME" ] ; then echo "[ERROR] \$GIT_USERNAME is not set." exit 3 fi if [ -z "$GIT_USER_MAIL" ] ; then echo "[ERROR] \$GIT_USER_MAIL is not set." exit 3 fi if [ -z "$GIT_REPO_REMOTE_NAME" ] ; then echo "[ERROR] \$GIT_REPO_REMOTE_NAME is not set." exit 3 fi if [ -z "$DEVICES" ] ; then echo "[ERROR] \$DEVICES is not set." exit 3 fi echo "[INFO] clone repository..." if GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -i $GIT_REPO_DEPLOY_KEY" git clone "$GIT_REPO_URL" "$GIT_REPO_PATH" --quiet > /dev/null; then cd "$GIT_REPO_PATH" || exit else echo "[ERROR] Failed to clone repository." exit 1 fi while true ; do echo "[INFO] pull repository..." git pull --quiet &> /dev/null # Save the current value of IFS to restore later OLD_IFS=$IFS # Set the IFS to a comma to split the values IFS=',' while read -r FQDN USERNAME SSH_KEY_PATH; do # bereinige FQDN FQDN=$(echo "$FQDN" | tr -d "[:space:]") # prüfe ob Key existiert if [ ! -e "$SSH_KEY_PATH" ] ; then echo "[ERROR] File $SSH_KEY_PATH does not exist" echo "[ERROR] can not export $FQDN config" exit 2 fi # check if target is reachable if ssh -n -q -i "$SSH_KEY_PATH" -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 "${USERNAME}@${FQDN}" ; then echo "[INFO] export $FQDN config..." ssh -n -o StrictHostKeyChecking=no -i "$SSH_KEY_PATH" "${USERNAME}@${FQDN}" "/export show-sensitive" > "config_${FQDN}.rsc" 2> /dev/null # entferne Datumszeile sed -i -r '/^# [0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}\:[0-9]{2}\:[0-9]{2}\sby\sRouterOS\s[0-9\s\.]+/d' "config_${FQDN}.rsc" git add "config_${FQDN}.rsc" echo "[INFO] commit config for ${FQDN} ..." git commit -m "update config_${FQDN}" --quiet > /dev/null else echo "[ERROR] ${FQDN} not reachable!" fi done <<< "$DEVICES" echo "[INFO] push config(s)..." GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -i $GIT_REPO_DEPLOY_KEY" git push > /dev/null # Restore the original IFS value IFS=$OLD_IFS # loop echo "[INFO] sleep..." sleep "$INTERVAL" done