first commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
#!/bin/sh
|
||||
# Import n8n workflows and credentials from backup directory
|
||||
# This script runs inside the n8n-import container
|
||||
#
|
||||
# Credentials skip logic:
|
||||
# После успешного импорта создаётся маркер в /home/node/.n8n/imported/
|
||||
# При повторном запуске файл с существующим маркером пропускается.
|
||||
# Это позволяет не перезатирать API-ключи при повторном деплое.
|
||||
# Чтобы принудительно переимпортировать — удалить маркер или задать FORCE_IMPORT=true
|
||||
|
||||
set -e
|
||||
|
||||
MARKER_DIR="/home/node/.n8n/imported"
|
||||
mkdir -p "$MARKER_DIR"
|
||||
|
||||
COUNTER_FILE=$(mktemp)
|
||||
trap 'rm -f "$COUNTER_FILE"' EXIT
|
||||
echo "0" > "$COUNTER_FILE"
|
||||
|
||||
# Import credentials first
|
||||
echo 'Importing credentials...'
|
||||
CRED_FILES=$(find /backup/credentials -maxdepth 1 -type f -not -name '.gitkeep' 2>/dev/null || true)
|
||||
if [ -n "$CRED_FILES" ]; then
|
||||
CRED_COUNT=$(echo "$CRED_FILES" | wc -l | tr -d ' ')
|
||||
|
||||
# Normalize credentials files (wrap object in array if needed)
|
||||
echo "$CRED_FILES" | while IFS= read -r file; do
|
||||
FIRST_CHAR=$(head -c 1 "$file")
|
||||
if [ "$FIRST_CHAR" = "{" ]; then
|
||||
TMPFILE=$(mktemp)
|
||||
echo "[$(cat "$file")]" > "$TMPFILE"
|
||||
mv "$TMPFILE" "$file"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "0" > "$COUNTER_FILE"
|
||||
echo "$CRED_FILES" | while IFS= read -r file; do
|
||||
CURRENT=$(cat "$COUNTER_FILE")
|
||||
CURRENT=$((CURRENT + 1))
|
||||
echo "$CURRENT" > "$COUNTER_FILE"
|
||||
filename=$(basename "$file")
|
||||
MARKER="$MARKER_DIR/cred_$(echo "$filename" | tr '/' '_')"
|
||||
|
||||
printf "[%2d/%d] %s" "$CURRENT" "$CRED_COUNT" "$filename"
|
||||
|
||||
# Пропустить если уже импортировался и FORCE_IMPORT не задан
|
||||
if [ -f "$MARKER" ] && [ "$FORCE_IMPORT" != "true" ]; then
|
||||
echo " SKIPPED (already imported, set FORCE_IMPORT=true to override)"
|
||||
continue
|
||||
fi
|
||||
|
||||
OUTPUT_FILE=$(mktemp)
|
||||
|
||||
if n8n import:credentials --input="$file" > "$OUTPUT_FILE" 2>&1; then
|
||||
echo " OK"
|
||||
touch "$MARKER"
|
||||
if [ -s "$OUTPUT_FILE" ]; then
|
||||
echo " Details: $(cat "$OUTPUT_FILE" | tr '\n' ' ')"
|
||||
fi
|
||||
else
|
||||
echo " FAILED"
|
||||
echo " Error: $(cat "$OUTPUT_FILE" | tr '\n' ' ')"
|
||||
fi
|
||||
|
||||
rm -f "$OUTPUT_FILE"
|
||||
done
|
||||
fi
|
||||
|
||||
# Import workflows
|
||||
echo ''
|
||||
echo 'Importing workflows...'
|
||||
WORKFLOW_FILES=$(find /backup/workflows -maxdepth 1 -type f -not -name '.gitkeep' 2>/dev/null || true)
|
||||
if [ -z "$WORKFLOW_FILES" ]; then
|
||||
echo 'No workflows found to import.'
|
||||
exit 0
|
||||
fi
|
||||
TOTAL_FOUND=$(echo "$WORKFLOW_FILES" | wc -l | tr -d ' ')
|
||||
if [ -n "$IMPORT_LIMIT" ]; then
|
||||
WORKFLOW_FILES=$(echo "$WORKFLOW_FILES" | head -n "$IMPORT_LIMIT")
|
||||
fi
|
||||
TOTAL=$(echo "$WORKFLOW_FILES" | wc -l | tr -d ' ')
|
||||
echo "Importing $TOTAL of $TOTAL_FOUND workflows"
|
||||
echo ''
|
||||
echo "0" > "$COUNTER_FILE"
|
||||
echo "$WORKFLOW_FILES" | while IFS= read -r file; do
|
||||
CURRENT=$(cat "$COUNTER_FILE")
|
||||
CURRENT=$((CURRENT + 1))
|
||||
echo "$CURRENT" > "$COUNTER_FILE"
|
||||
filename=$(basename "$file")
|
||||
printf "[%3d/%d] %s" "$CURRENT" "$TOTAL" "$filename"
|
||||
|
||||
OUTPUT_FILE=$(mktemp)
|
||||
|
||||
if n8n import:workflow --input="$file" > "$OUTPUT_FILE" 2>&1; then
|
||||
echo " OK"
|
||||
if [ -s "$OUTPUT_FILE" ]; then
|
||||
OUTPUT=$(cat "$OUTPUT_FILE")
|
||||
if echo "$OUTPUT" | grep -q "id"; then
|
||||
echo " Imported: $(echo "$OUTPUT" | tr '\n' ' ' | sed 's/[{}"]//g')"
|
||||
else
|
||||
echo " Details: $OUTPUT"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo " FAILED"
|
||||
echo " Error: $(cat "$OUTPUT_FILE" | tr '\n' ' ')"
|
||||
fi
|
||||
|
||||
rm -f "$OUTPUT_FILE"
|
||||
done
|
||||
echo ''
|
||||
echo 'Import complete!'
|
||||
Reference in New Issue
Block a user