93 lines
2.6 KiB
Bash
93 lines
2.6 KiB
Bash
#!/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 ping -c1 -W1 "${FQDN}" > /dev/null; 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
|