-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevstream.sh
More file actions
executable file
·175 lines (150 loc) · 5.94 KB
/
devstream.sh
File metadata and controls
executable file
·175 lines (150 loc) · 5.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#!/usr/bin/env bash
set -euo pipefail
### CONFIG
CLUSTER_NAME="gitops-demo"
TERRAFORM_DIR="/home/jp/gitops/DevStream/terraform"
EDGE_CMD="powershell.exe -Command Start-Process msedge"
### LOGGING
log() { echo -e "\e[1;34m=> $*\e[0m"; }
error() { echo -e "\e[1;31m✗ $*\e[0m" >&2; exit 1; }
prompt_choice() {
local msg=$1 default=$2 choice
while true; do
read -rp "$msg [$default] " choice
choice=${choice:-$default}
case "$choice" in
[uU]) return 0 ;; # update
[xX]) return 1 ;; # skip
*) echo " Kies 'u' om te updaten of 'x' om door te gaan." ;;
esac
done
}
usage() {
cat <<EOF
Gebruik: $0 [-d]
-d Delete k3d-cluster '$CLUSTER_NAME' en stop Docker-daemon, daarna exit
EOF
exit 1
}
delete_and_stop() {
log "Verwijder k3d-cluster '$CLUSTER_NAME'…"
if k3d cluster list | grep -q "^${CLUSTER_NAME}\b"; then
k3d cluster delete "$CLUSTER_NAME"
log "Cluster verwijderd."
else
log "Cluster '$CLUSTER_NAME' bestaat niet."
fi
log "Klaar met verwijderen en stoppen."
exit 0
}
### PARSE OPTIES
if [[ "${1:-}" == "-"* ]]; then
while getopts ":d" opt; do
case "$opt" in
d) delete_and_stop ;;
*) usage ;;
esac
done
fi
### 1. Eénmalige systeem-update
log "Voer één keer apt-get update uit voor alle installaties"
sudo apt-get update -y
### 2. Installatie-helpers
install_jq() { log "jq installeren…" && sudo apt-get install -y jq; }
install_terraform(){ log "Terraform installeren…"&& sudo apt-get install -y terraform; }
install_helm() { log "Helm installeren…" && curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash; }
install_k3d() { log "k3d installeren…" && curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash; }
install_kubectl(){ log "kubectl installeren…"&& sudo apt-get install -y kubectl; }
install_argocd(){
log "argocd CLI installeren…"
local ver tmpfile
ver=$(curl -sSL https://api.github.com/repos/argoproj/argo-cd/releases/latest | jq -r .tag_name | sed 's/^v//')
tmpfile=$(mktemp)
curl -sSL -o "$tmpfile" https://github.com/argoproj/argo-cd/releases/download/v${ver}/argocd-linux-amd64
chmod +x "$tmpfile"
sudo mv "$tmpfile" /usr/local/bin/argocd
log "argocd CLI versie ${ver} geïnstalleerd"
}
### 3. Bepaal nieuwste versies (batch)
declare -A latest_versions
log "Bepaal nieuwste tool-versies (batch)"
latest_versions[terraform]=$(curl -s https://releases.hashicorp.com/index.json | jq -r '.terraform.versions|keys[]' | grep -Ev 'alpha|beta|rc' | sort -Vr | head -n1)
latest_versions[kubectl]=$(curl -sL https://dl.k8s.io/release/stable.txt | sed 's/^v//')
latest_versions[helm]=$(curl -s https://api.github.com/repos/helm/helm/releases/latest | jq -r .tag_name | sed 's/^v//')
latest_versions[k3d]=$(curl -s https://api.github.com/repos/k3d-io/k3d/releases/latest | jq -r .tag_name | sed 's/^v//')
latest_versions[jq]=$(curl -s https://api.github.com/repos/stedolan/jq/releases/latest | jq -r .tag_name | sed 's/^jq-//')
latest_versions[argocd]=$(curl -s https://api.github.com/repos/argoproj/argo-cd/releases/latest | jq -r .tag_name | sed 's/^v//')
### 4. Versiecheck & optionele update
check_and_maybe_update() {
local cmd=$1 inst_ver="" latest_ver="${latest_versions[$cmd]}"
if ! command -v "$cmd" &>/dev/null; then
install_"$cmd"
return
fi
# Haal geïnstalleerde versie op
case "$cmd" in
terraform) inst_ver=$(terraform version -json | jq -r .terraform_version) ;;
kubectl) inst_ver=$(kubectl version --client -o json | jq -r .clientVersion.gitVersion | sed 's/^v//') ;;
helm) inst_ver=$(helm version --short | sed 's/^v//' | sed 's/+.*//') ;;
k3d) inst_ver=$(k3d version | awk '/k3d version/ {print $3}' | sed 's/^v//' | sed 's/+.*//') ;;
jq) inst_ver=$(jq --version | sed 's/^jq-//') ;;
argocd) inst_ver=$(argocd version --client 2>/dev/null | head -1 | awk '{print $2}' | sed 's/^v//' | sed 's/+.*//') ;;
*) log "Geen versie-info voor $cmd beschikbaar"; return;;
esac
# Strip suffix vanaf '+'
inst_ver="${inst_ver%%+*}"
latest_ver="${latest_ver%%+*}"
log "$cmd geïnstalleerd: versie $inst_ver"
if [[ -z "$latest_ver" || "$latest_ver" == "null" ]]; then
log "Kan nieuwste versie van $cmd niet ophalen, sla check over"
return
fi
if [[ "$inst_ver" != "$latest_ver" ]]; then
log "Nieuwere versie van $cmd beschikbaar: $latest_ver (geïnstalleerd: $inst_ver)"
if prompt_choice "Update naar $latest_ver? (u=update, x=houd $inst_ver)" "u"; then
install_"$cmd"
else
log "Behoud huidige versie van $cmd ($inst_ver)"
fi
else
log "$cmd is up-to-date ($inst_ver)"
fi
}
### 5. Check/install CLI’s
for cmd in jq terraform kubectl helm k3d argocd; do
check_and_maybe_update "$cmd"
done
### 6. Maak k3d-cluster (met config in default ~/.kube-config)
if ! k3d cluster list | grep -q "^${CLUSTER_NAME}\b"; then
log "Cluster '$CLUSTER_NAME' bestaat nog niet, maak aan…"
k3d cluster create "$CLUSTER_NAME" \
--servers 1 \
--agents 2 \
--port "30080:30080@loadbalancer" \
--port "30443:30443@loadbalancer" \
--kubeconfig-update-default
else
log "Cluster '$CLUSTER_NAME' bestaat al"
fi
### 7. Terraform apply voor ArgoCD & Crossplane
if [ ! -d "$TERRAFORM_DIR" ]; then
error "Directory '$TERRAFORM_DIR' bestaat niet. Plaats je main.tf daar."
fi
log "Ga naar Terraform folder en initialiseer/apply…"
pushd "$TERRAFORM_DIR" &>/dev/null
terraform init -input=false
terraform apply -auto-approve
popd &>/dev/null
### 8. Haal ArgoCD admin wachtwoord op & login
ARGO_PASS=$(kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d)
echo
log "Argo CD admin-wachtwoord: $ARGO_PASS"
argocd login localhost:30443 \
--username admin \
--password "$ARGO_PASS" \
--insecure
### 9. Open Argo CD in Edge
log "Argo CD UI openen in Edge…"
$EDGE_CMD "http://localhost:30443"
log "Klaar! 🎉"