apps-gitops/automation/cloudflared-sync.sh
2025-06-19 22:40:15 +03:00

97 lines
3.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -e
# 📦 Install required tools (run via Woodpecker .woodpecker.yml)
# Ensure apk installs: yq, jq, git, bash, curl
echo "🔍 Scanning for apps with cname.yaml..."
mkdir -p generated-values
rm -rf .tmp-repos
mkdir -p .tmp-repos
# === REPO CONFIG ===
SANDBOX_REPO_URL="https://git.dvirlabs.com/dvirlabs/sandbox.git"
INFRA_REPO_URL="https://git.dvirlabs.com/dvirlabs/infra.git"
SANDBOX_CLONE=".tmp-repos/sandbox"
INFRA_CLONE=".tmp-repos/infra"
GENERATED_FILE="generated-values/cloudflared-values.yaml"
ORIGINAL_FILE="$INFRA_CLONE/cloudflared/values.yaml"
MERGED_FILE="$INFRA_CLONE/cloudflared/values.yaml"
# === STEP 1: Clone Repos ===
echo "📦 Cloning sandbox-apps..."
git clone --depth=1 "$SANDBOX_REPO_URL" "$SANDBOX_CLONE"
echo "📦 Cloning infra..."
git clone --depth=1 "$INFRA_REPO_URL" "$INFRA_CLONE"
ls -l .tmp-repos/
# === STEP 2: Extract Generated CNAMEs from sandbox ===
echo "⚙️ Generating sandbox ingress list..."
cat <<EOF > "$GENERATED_FILE"
ingress: []
EOF
find "$SANDBOX_CLONE/manifests" -name cname.yaml | while read -r cname_file; do
app_name=$(basename "$(dirname "$cname_file")")
enabled=$(yq '.enabled' "$cname_file")
if [[ "$enabled" == "true" ]]; then
hostname=$(yq '.hostname' "$cname_file")
service="http://${app_name}.sandbox.svc.cluster.local:80"
echo "✅ Found $hostname$service"
# Append new entry to generated ingress list
yq eval ".ingress += [{\"hostname\": \"$hostname\", \"service\": \"$service\"}]" -i "$GENERATED_FILE"
fi
done
echo "📄 Generated Ingress:"
cat "$GENERATED_FILE"
# === STEP 3: Merge with existing cloudflared values ===
echo "🔁 Merging new entries into: $ORIGINAL_FILE"
TEMP_FILE=$(mktemp)
# Copy original ingress list (except null or malformed)
yq eval '.cloudflare.ingress' "$ORIGINAL_FILE" > "$TEMP_FILE"
# Append new unique entries
yq eval '.ingress' "$GENERATED_FILE" | yq eval -o=json '.' - | jq -c '.[]' | while read -r new_entry; do
hostname=$(echo "$new_entry" | jq -r '.hostname')
service=$(echo "$new_entry" | jq -r '.service')
exists=$(yq e ".cloudflare.ingress[] | select(.hostname == \"$hostname\")" "$ORIGINAL_FILE")
if [ -z "$exists" ]; then
echo " Adding $hostname$service"
yq eval ". += [{\"hostname\": \"$hostname\", \"service\": \"$service\"}]" -i "$TEMP_FILE"
else
echo "⚠️ $hostname already exists, skipping"
fi
done
# === STEP 4: Write merged file ===
yq eval '
.cloudflare.ingress = load("'"$TEMP_FILE"'") |
.cloudflare.tunnelName = .cloudflare.tunnelName |
.cloudflare.enableWarp = .cloudflare.enableWarp |
.cloudflare.secretName = .cloudflare.secretName |
.cloudflared = .cloudflared
' "$ORIGINAL_FILE" > "$MERGED_FILE"
echo "✅ Final merged values.yaml:"
cat "$MERGED_FILE"
# === STEP 5: Optional push
# cd "$INFRA_CLONE"
# git config user.name "woodpecker-bot"
# git config user.email "ci@dvirlabs.com"
# git add cloudflared/values.yaml
# git commit -m "chore(cloudflared): auto-add ingress from sandbox"
# git push