ADD: added nextcloud
This commit is contained in:
156
k3s/apps/Nextcloud/helm/cleanRestart.sh
Executable file
156
k3s/apps/Nextcloud/helm/cleanRestart.sh
Executable file
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Konfiguration (anpassen falls nötig)
|
||||
NAMESPACE="nextcloud"
|
||||
RELEASE="nextcloud"
|
||||
CHART="nextcloud/nextcloud"
|
||||
VALUES_FILE="values-nextcloud.yaml"
|
||||
SMB_SCRIPT_FILE="install-smb.sh"
|
||||
CONFIGMAP_NAME="smb-install-script"
|
||||
HELM_REPO_NAME="nextcloud"
|
||||
HELM_REPO_URL="https://nextcloud.github.io/helm/"
|
||||
WAIT_TIMEOUT="600s" # Timeout für Pod-Readiness (10m)
|
||||
|
||||
# Hilfsfunktionen
|
||||
err() { echo "ERROR: $*" >&2; exit 1; }
|
||||
info() { echo "INFO: $*"; }
|
||||
|
||||
confirm() {
|
||||
echo
|
||||
echo "!!! Achtung: Das Skript wird das Helm-Release '$RELEASE' im Namespace '$NAMESPACE' deinstallieren"
|
||||
echo " und alle zugehörigen PersistentVolumeClaims (PVCs) löschen. Daten gehen verloren!"
|
||||
echo
|
||||
read -p "Tippe DELETE um fortzufahren (oder STRG-C zum Abbrechen): " ans
|
||||
if [ "$ans" != "DELETE" ]; then
|
||||
echo "Abgebrochen."
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
check_tools() {
|
||||
command -v kubectl >/dev/null 2>&1 || err "kubectl ist nicht installiert oder nicht in PATH"
|
||||
command -v helm >/dev/null 2>&1 || err "helm ist nicht installiert oder nicht in PATH"
|
||||
}
|
||||
|
||||
create_namespace_if_missing() {
|
||||
if ! kubectl get namespace "$NAMESPACE" >/dev/null 2>&1; then
|
||||
info "Namespace $NAMESPACE existiert nicht — wird angelegt"
|
||||
kubectl create namespace "$NAMESPACE"
|
||||
else
|
||||
info "Namespace $NAMESPACE existiert"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstall_release() {
|
||||
if helm -n "$NAMESPACE" status "$RELEASE" >/dev/null 2>&1; then
|
||||
info "Helm-Release '$RELEASE' gefunden -> deinstalliere..."
|
||||
helm -n "$NAMESPACE" uninstall "$RELEASE"
|
||||
info "Warte bis alle Pods des Releases entfernt sind..."
|
||||
# Warte bis keine Pods mehr mit dem Release-Label vorhanden sind
|
||||
for i in $(seq 1 60); do
|
||||
sleep 2
|
||||
COUNT=$(kubectl -n "$NAMESPACE" get pods -l app.kubernetes.io/instance="$RELEASE" --no-headers 2>/dev/null | wc -l || true)
|
||||
if [ "$COUNT" -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
done
|
||||
echo
|
||||
else
|
||||
info "Kein bestehendes Helm-Release '$RELEASE' gefunden"
|
||||
fi
|
||||
}
|
||||
|
||||
delete_pvcs() {
|
||||
# Liste PVCs, die zum Release gehören (Label app.kubernetes.io/instance)
|
||||
PVCS=$(kubectl -n "$NAMESPACE" get pvc -l app.kubernetes.io/instance="$RELEASE" -o jsonpath='{.items[*].metadata.name}' || true)
|
||||
if [ -z "$PVCS" ]; then
|
||||
info "Keine PVCs mit Label app.kubernetes.io/instance=$RELEASE gefunden"
|
||||
return
|
||||
fi
|
||||
|
||||
info "Folgende PVCs werden gelöscht: $PVCS"
|
||||
kubectl -n "$NAMESPACE" delete pvc $PVCS
|
||||
info "Warte auf Löschung der PVCs..."
|
||||
for pvc in $PVCS; do
|
||||
kubectl -n "$NAMESPACE" wait --for=delete pvc/"$pvc" --timeout=120s || true
|
||||
done
|
||||
}
|
||||
|
||||
recreate_configmap() {
|
||||
if [ ! -f "$SMB_SCRIPT_FILE" ]; then
|
||||
err "SMB-Script '$SMB_SCRIPT_FILE' fehlt. Lege die Datei an oder passe \$SMB_SCRIPT_FILE an."
|
||||
fi
|
||||
info "Erstelle/aktualisiere ConfigMap $CONFIGMAP_NAME aus $SMB_SCRIPT_FILE"
|
||||
kubectl -n "$NAMESPACE" create configmap "$CONFIGMAP_NAME" --from-file="$SMB_SCRIPT_FILE" -o yaml --dry-run=client | kubectl apply -f -
|
||||
}
|
||||
|
||||
add_helm_repo() {
|
||||
# Add repo if not exists
|
||||
if ! helm repo list | awk '{print $1}' | grep -xq "$HELM_REPO_NAME"; then
|
||||
info "Füge Helm-Repo $HELM_REPO_NAME hinzu"
|
||||
helm repo add "$HELM_REPO_NAME" "$HELM_REPO_URL"
|
||||
fi
|
||||
helm repo update
|
||||
}
|
||||
|
||||
install_release() {
|
||||
if [ ! -f "$VALUES_FILE" ]; then
|
||||
err "Values-File '$VALUES_FILE' nicht gefunden. Abbruch."
|
||||
fi
|
||||
info "Installiere Helm-Release '$RELEASE' mit values '$VALUES_FILE'"
|
||||
helm upgrade --install "$RELEASE" "$CHART" -n "$NAMESPACE" -f "$VALUES_FILE"
|
||||
}
|
||||
|
||||
wait_pods_ready() {
|
||||
info "Warte bis alle Pods des Releases ready sind (Timeout $WAIT_TIMEOUT)..."
|
||||
# Warte auf Ready-Bedingung für alle Pods mit dem instance-Label
|
||||
if ! kubectl -n "$NAMESPACE" wait --for=condition=Ready pod -l app.kubernetes.io/instance="$RELEASE" --all --timeout="$WAIT_TIMEOUT"; then
|
||||
echo "WARNUNG: Nicht alle Pods sind innerhalb des Timeouts ready. Aktuelle Pods:"
|
||||
kubectl -n "$NAMESPACE" get pods -o wide
|
||||
return 1
|
||||
fi
|
||||
info "Alle Pods sind ready."
|
||||
}
|
||||
|
||||
post_checks() {
|
||||
info "Prüfe smbclient im Nextcloud-Container (falls Pod läuft)..."
|
||||
POD=$(kubectl -n "$NAMESPACE" get pod -l app.kubernetes.io/instance="$RELEASE",app.kubernetes.io/component=app -o jsonpath='{.items[0].metadata.name}' 2>/dev/null || true)
|
||||
if [ -n "$POD" ]; then
|
||||
kubectl -n "$NAMESPACE" exec -it "$POD" -- sh -c 'command -v smbclient && smbclient -V || echo "smbclient nicht gefunden"'
|
||||
else
|
||||
info "Nextcloud-App-Pod nicht gefunden (noch nicht gestartet)."
|
||||
fi
|
||||
info "Führe 'occ files_external:backends' aus (falls Pod läuft)..."
|
||||
if [ -n "$POD" ]; then
|
||||
kubectl -n "$NAMESPACE" exec -it "$POD" -- sh -c 'php /var/www/html/occ files_external:backends || true'
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
check_tools
|
||||
confirm
|
||||
create_namespace_if_missing
|
||||
|
||||
uninstall_release
|
||||
delete_pvcs
|
||||
|
||||
# recreate_configmap
|
||||
# add_helm_repo
|
||||
# install_release
|
||||
|
||||
# # Warte auf Pods
|
||||
# if ! wait_pods_ready; then
|
||||
# info "Einige Pods sind möglicherweise nicht ready. Schaue in die Logs:"
|
||||
# kubectl -n "$NAMESPACE" get pods
|
||||
# kubectl -n "$NAMESPACE" logs -l app.kubernetes.io/instance="$RELEASE" --tail=100 || true
|
||||
# fi
|
||||
|
||||
# post_checks
|
||||
|
||||
echo
|
||||
echo "Fertig. Prüfe die Nextcloud-WebUI und gegebenenfalls die External Storage Einstellungen."
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user