|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +# CONFIGURATION ——— |
| 5 | +WORKDIR="./hauler_temp" |
| 6 | +mkdir -p "${WORKDIR}" |
| 7 | + |
| 8 | +# Add & update the Prime Helm repo |
| 9 | +helm repo add rancher-prime https://charts.rancher.com/server-charts/prime |
| 10 | +helm repo update |
| 11 | + |
| 12 | +# Auto-detect Rancher version from your cluster (fallback to Helm) |
| 13 | +if RANCHER_IMAGE=$(kubectl -n cattle-system get deployment rancher \ |
| 14 | + -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null); then |
| 15 | + RANCHER_VERSION="${RANCHER_IMAGE##*:}" |
| 16 | + echo "Detected Rancher image in cluster: ${RANCHER_IMAGE}" |
| 17 | + echo "Using Rancher version: ${RANCHER_VERSION}" |
| 18 | +else |
| 19 | + echo "Could not detect Rancher in cattle-system, falling back to Helm query" |
| 20 | + RANCHER_VERSION=$(helm search repo rancher-prime/rancher \ |
| 21 | + | awk 'NR==2 {print $3}') |
| 22 | + echo "Using Rancher GitHub release tag: ${RANCHER_VERSION}" |
| 23 | +fi |
| 24 | + |
| 25 | +# Download & fail if the tag doesn’t exist |
| 26 | +PRIME_BASE="https://prime.ribs.rancher.io/rancher/${RANCHER_VERSION}" |
| 27 | +curl -fSL "${PRIME_BASE}/rancher-images.txt" \ |
| 28 | + -o "${WORKDIR}/orig-rancher-images.txt" \ |
| 29 | +|| { |
| 30 | + echo >&2 "ERROR: Rancher Prime release ${RANCHER_VERSION} not found at ${PRIME_BASE}" |
| 31 | + exit 1 |
| 32 | +} |
| 33 | + |
| 34 | +# Filter out unneeded images |
| 35 | +sed -E '/neuvector|minio|gke|aks|eks|sriov|harvester|mirrored|longhorn|thanos|tekton|istio|hyper|jenkins|windows/d' \ |
| 36 | + "${WORKDIR}/orig-rancher-images.txt" \ |
| 37 | + > "${WORKDIR}/cleaned-rancher-images.txt" |
| 38 | + |
| 39 | +# Re-add Cluster API and kubectl entries |
| 40 | +grep cluster-api "${WORKDIR}/orig-rancher-images.txt" >> "${WORKDIR}/cleaned-rancher-images.txt" |
| 41 | +grep kubectl "${WORKDIR}/orig-rancher-images.txt" >> "${WORKDIR}/cleaned-rancher-images.txt" |
| 42 | + |
| 43 | +# ——— 5. Pick the latest tag for each repo ——— |
| 44 | +> "${WORKDIR}/rancher-unsorted.txt" |
| 45 | +awk -F: '{print $1}' "${WORKDIR}/cleaned-rancher-images.txt" | sort -u | |
| 46 | +while read -r repo; do |
| 47 | + grep -w "$repo" "${WORKDIR}/cleaned-rancher-images.txt" \ |
| 48 | + | sort -Vr | head -1 \ |
| 49 | + >> "${WORKDIR}/rancher-unsorted.txt" |
| 50 | +done |
| 51 | + |
| 52 | +# Final sort & dedupe |
| 53 | +sort -u "${WORKDIR}/rancher-unsorted.txt" > "${WORKDIR}/rancher-images.txt" |
| 54 | + |
| 55 | +# Manual fix-ups |
| 56 | +{ |
| 57 | + echo "rancher/kubectl:v1.20.2" |
| 58 | + echo "rancher/shell:v0.1.24" |
| 59 | + grep mirrored-ingress-nginx "${WORKDIR}/orig-rancher-images.txt" |
| 60 | +} >> "${WORKDIR}/rancher-images.txt" |
| 61 | + |
| 62 | +# Generate airgap_hauler.yaml |
| 63 | +cat > airgap_hauler.yaml <<EOF |
| 64 | +images: |
| 65 | +EOF |
| 66 | +while read -r img; do |
| 67 | + echo " - name: ${img}" |
| 68 | +done < "${WORKDIR}/rancher-images.txt" >> airgap_hauler.yaml |
| 69 | + |
| 70 | +echo " • ${WORKDIR}/rancher-images.txt" |
| 71 | +echo " • airgap_hauler.yaml" |
0 commit comments