diff options
| author | Paul Buetow <paul@buetow.org> | 2026-01-07 22:48:29 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-01-07 22:48:29 +0200 |
| commit | f7624de03b894d31347ec15c9571e8cfe83903ff (patch) | |
| tree | 88a35208c57c3fc7be94196574a99ce3322e522f | |
| parent | f1925c872c496c914da99fcbf3a07c9292e911a7 (diff) | |
Migrate 8 remaining simple service apps to ArgoCD
Apps migrated in this commit:
- anki-sync-server (custom images, 1 PVC)
- syncthing (file sync, 2 PVCs)
- audiobookshelf (3 PVCs)
- radicale (CalDAV/CardDAV)
- opodsync (podcast sync, 2-container pod)
- kobo-sync-server (eReader sync)
- filebrowser (3 PVCs)
- webdav (WebDAV server)
All apps:
- Created ArgoCD Application manifests
- Updated Justfiles with ArgoCD commands
- All synced successfully and healthy
- Zero downtime migrations
Also includes:
- Updated migration progress tracker (12/23 apps, 52%)
- Deleted freshrss directory (app no longer needed)
Progress: 12/23 apps (52%)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
27 files changed, 656 insertions, 238 deletions
diff --git a/f3s/CLAUDE.md b/f3s/CLAUDE.md index 18cf7d2..5592e84 100644 --- a/f3s/CLAUDE.md +++ b/f3s/CLAUDE.md @@ -1,2 +1 @@ -Read /home/paul/Notes/snippets/f3s/f3s.md - +@/home/paul/Notes/snippets/f3s/f3s.md diff --git a/f3s/anki-sync-server/Justfile b/f3s/anki-sync-server/Justfile index 73d679c..8c6cd97 100644 --- a/f3s/anki-sync-server/Justfile +++ b/f3s/anki-sync-server/Justfile @@ -1,12 +1,55 @@ NAMESPACE := "services" -RELEASE_NAME := "anki-sync-server" -CHART_PATH := "./helm-chart" +APP_NAME := "anki-sync-server" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +# Build Docker image +build: + just -f docker-image-Justfile build -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +# Push image to registry +push: + just -f docker-image-Justfile push -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +# Build and push +build-push: build push + +# Show deployment status +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep anki + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} anki-sync-server-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} anki-sync-server-ingress + @echo "" + @echo "=== PVC ===" + @kubectl get pvc -n {{NAMESPACE}} anki-data-pvc + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" || echo "Not found" + +# View logs +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=anki-sync-server --tail={{lines}} -f + +# Port forward +port-forward port="8080": + @echo "Forwarding anki-sync-server to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/anki-sync-server-service {{port}}:8080 + +# Trigger ArgoCD sync +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +# Show ArgoCD application details +argocd-status: + argocd app get {{APP_NAME}} --core + +# Restart +restart: + @echo "Restarting anki-sync-server..." + kubectl rollout restart -n {{NAMESPACE}} deployment/anki-sync-server diff --git a/f3s/argocd-apps/anki-sync-server.yaml b/f3s/argocd-apps/anki-sync-server.yaml new file mode 100644 index 0000000..850af3e --- /dev/null +++ b/f3s/argocd-apps/anki-sync-server.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: anki-sync-server + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/anki-sync-server/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/audiobookshelf.yaml b/f3s/argocd-apps/audiobookshelf.yaml new file mode 100644 index 0000000..e90e374 --- /dev/null +++ b/f3s/argocd-apps/audiobookshelf.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: audiobookshelf + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/audiobookshelf/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/filebrowser.yaml b/f3s/argocd-apps/filebrowser.yaml new file mode 100644 index 0000000..5e32211 --- /dev/null +++ b/f3s/argocd-apps/filebrowser.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: filebrowser + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/filebrowser/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/kobo-sync-server.yaml b/f3s/argocd-apps/kobo-sync-server.yaml new file mode 100644 index 0000000..eaae84c --- /dev/null +++ b/f3s/argocd-apps/kobo-sync-server.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kobo-sync-server + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/kobo-sync-server/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/miniflux.yaml b/f3s/argocd-apps/miniflux.yaml new file mode 100644 index 0000000..9b3a23a --- /dev/null +++ b/f3s/argocd-apps/miniflux.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: miniflux + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/miniflux/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/opodsync.yaml b/f3s/argocd-apps/opodsync.yaml new file mode 100644 index 0000000..b4b0e54 --- /dev/null +++ b/f3s/argocd-apps/opodsync.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: opodsync + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/opodsync/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/radicale.yaml b/f3s/argocd-apps/radicale.yaml new file mode 100644 index 0000000..d12d771 --- /dev/null +++ b/f3s/argocd-apps/radicale.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: radicale + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/radicale/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/syncthing.yaml b/f3s/argocd-apps/syncthing.yaml new file mode 100644 index 0000000..6cec5d3 --- /dev/null +++ b/f3s/argocd-apps/syncthing.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: syncthing + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/syncthing/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/tracing-demo.yaml b/f3s/argocd-apps/tracing-demo.yaml new file mode 100644 index 0000000..30ab9b0 --- /dev/null +++ b/f3s/argocd-apps/tracing-demo.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: tracing-demo + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/tracing-demo/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/argocd-apps/webdav.yaml b/f3s/argocd-apps/webdav.yaml new file mode 100644 index 0000000..3c3158b --- /dev/null +++ b/f3s/argocd-apps/webdav.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: webdav + namespace: cicd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://codeberg.org/snonux/conf.git + targetRevision: master + path: f3s/webdav/helm-chart + destination: + server: https://kubernetes.default.svc + namespace: services + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=false + retry: + limit: 3 + backoff: + duration: 5s + factor: 2 + maxDuration: 1m diff --git a/f3s/audiobookshelf/Justfile b/f3s/audiobookshelf/Justfile index bc020be..b74631a 100644 --- a/f3s/audiobookshelf/Justfile +++ b/f3s/audiobookshelf/Justfile @@ -1,12 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "audiobookshelf" -CHART_PATH := "./helm-chart" +APP_NAME := "audiobookshelf" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep audiobookshelf + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} audiobookshelf-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} audiobookshelf-ingress + @echo "" + @echo "=== PVCs ===" + @kubectl get pvc -n {{NAMESPACE}} | grep audiobookshelf + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=audiobookshelf --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +port-forward port="8000": + @echo "Forwarding audiobookshelf to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/audiobookshelf-service {{port}}:8000 + +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting audiobookshelf..." + kubectl rollout restart -n {{NAMESPACE}} deployment/audiobookshelf diff --git a/f3s/filebrowser/Justfile b/f3s/filebrowser/Justfile index 2479d83..d8b55a6 100644 --- a/f3s/filebrowser/Justfile +++ b/f3s/filebrowser/Justfile @@ -1,16 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "filebrowser" -CHART_PATH := "./helm-chart" +APP_NAME := "filebrowser" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep filebrowser + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} filebrowser-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} filebrowser-ingress + @echo "" + @echo "=== PVCs ===" + @kubectl get pvc -n {{NAMESPACE}} | grep filebrowser + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=filebrowser --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} - kubectl delete pvc filebrowser-data-pvc filebrowser-database-pvc filebrowser-config-pvc -n {{NAMESPACE}} --ignore-not-found - kubectl delete pv filebrowser-data-pv filebrowser-database-pv filebrowser-config-pv --ignore-not-found +port-forward port="8080": + @echo "Forwarding filebrowser to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/filebrowser-service {{port}}:8080 -deinstall: delete +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting filebrowser..." + kubectl rollout restart -n {{NAMESPACE}} deployment/filebrowser diff --git a/f3s/freshrss/Justfile b/f3s/freshrss/Justfile deleted file mode 100644 index d88fe3d..0000000 --- a/f3s/freshrss/Justfile +++ /dev/null @@ -1,12 +0,0 @@ -NAMESPACE := "services" -RELEASE_NAME := "freshrss" -CHART_PATH := "./helm-chart" - -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace - -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} - -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} diff --git a/f3s/freshrss/README.md b/f3s/freshrss/README.md deleted file mode 100644 index 1a88372..0000000 --- a/f3s/freshrss/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# FreshRSS Helm Chart - -This chart deploys FreshRSS using a single Deployment, Service, Ingress, and a hostPath-backed PersistentVolume/PersistentVolumeClaim for data. - -## Prerequisites - -Before installing the chart, you must manually create the hostPath directory used by the PersistentVolume (see `templates/persistent-volumes.yaml`): - -- `/data/nfs/k3svolumes/freshrss/data` - -Example commands: - -```bash -sudo mkdir -p /data/nfs/k3svolumes/freshrss/data -# Ensure write permissions for the runtime user/group (nobody:nogroup = 65534:65534) -sudo chown -R 65534:65534 /data/nfs/k3svolumes/freshrss/data -``` - -## Installing the Chart - -To install the chart with the release name `freshrss`, run: - -```bash -helm install freshrss . --namespace services --create-namespace -``` - -## Access - -- Ingress host: `freshrss.f3s.lan.buetow.org` diff --git a/f3s/freshrss/helm-chart/Chart.yaml b/f3s/freshrss/helm-chart/Chart.yaml deleted file mode 100644 index 05cd76a..0000000 --- a/f3s/freshrss/helm-chart/Chart.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v2 -name: freshrss -description: A Helm chart for deploying FreshRSS. -version: 0.1.0 -appVersion: "latest" - diff --git a/f3s/freshrss/helm-chart/templates/deployment.yaml b/f3s/freshrss/helm-chart/templates/deployment.yaml deleted file mode 100644 index 99f114c..0000000 --- a/f3s/freshrss/helm-chart/templates/deployment.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: freshrss - namespace: services -spec: - replicas: 1 - selector: - matchLabels: - app: freshrss - template: - metadata: - labels: - app: freshrss - spec: - securityContext: - runAsUser: 65534 # nobody - runAsGroup: 65534 # nobody / nogroup - fsGroup: 65534 # ensure mounted volumes are group-writable - runAsNonRoot: true - containers: - - name: freshrss - image: freshrss/freshrss:latest - ports: - - containerPort: 80 - volumeMounts: - - name: freshrss-data - mountPath: /var/www/FreshRSS/data - volumes: - - name: freshrss-data - persistentVolumeClaim: - claimName: freshrss-data-pvc ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app: freshrss - name: freshrss-service - namespace: services -spec: - ports: - - name: web - port: 80 - protocol: TCP - targetPort: 80 - selector: - app: freshrss diff --git a/f3s/freshrss/helm-chart/templates/ingress.yaml b/f3s/freshrss/helm-chart/templates/ingress.yaml deleted file mode 100644 index 6740961..0000000 --- a/f3s/freshrss/helm-chart/templates/ingress.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: freshrss-ingress - namespace: services - annotations: - spec.ingressClassName: traefik - traefik.ingress.kubernetes.io/router.entrypoints: web -spec: - rules: - - host: freshrss.f3s.buetow.org - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: freshrss-service - port: - number: 80 - diff --git a/f3s/freshrss/helm-chart/templates/persistent-volumes.yaml b/f3s/freshrss/helm-chart/templates/persistent-volumes.yaml deleted file mode 100644 index 813d2ac..0000000 --- a/f3s/freshrss/helm-chart/templates/persistent-volumes.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: freshrss-data-pv -spec: - capacity: - storage: 1Gi - volumeMode: Filesystem - accessModes: - - ReadWriteOnce - persistentVolumeReclaimPolicy: Retain - hostPath: - path: /data/nfs/k3svolumes/freshrss/data - type: Directory ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: freshrss-data-pvc - namespace: services -spec: - storageClassName: "" - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 1Gi - diff --git a/f3s/kobo-sync-server/Justfile b/f3s/kobo-sync-server/Justfile index d1c198f..09a0690 100644 --- a/f3s/kobo-sync-server/Justfile +++ b/f3s/kobo-sync-server/Justfile @@ -1,12 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "koreader-sync-server" -CHART_PATH := "./helm-chart" +APP_NAME := "kobo-sync-server" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep kobo + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} kobo-sync-server-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} kobo-sync-server-ingress + @echo "" + @echo "=== PVC ===" + @kubectl get pvc -n {{NAMESPACE}} kobo-data-pvc + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=kobo-sync-server --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +port-forward port="8080": + @echo "Forwarding kobo-sync-server to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/kobo-sync-server-service {{port}}:8080 + +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting kobo-sync-server..." + kubectl rollout restart -n {{NAMESPACE}} deployment/kobo-sync-server diff --git a/f3s/miniflux/Justfile b/f3s/miniflux/Justfile index 5becacf..229c6cb 100644 --- a/f3s/miniflux/Justfile +++ b/f3s/miniflux/Justfile @@ -1,12 +1,63 @@ NAMESPACE := "services" -RELEASE_NAME := "miniflux" -CHART_PATH := "./helm-chart" +APP_NAME := "miniflux" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +# Show deployment status +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} -l app=miniflux-server + @kubectl get pods -n {{NAMESPACE}} -l app=miniflux-postgres + @echo "" + @echo "=== Services ===" + @kubectl get svc -n {{NAMESPACE}} | grep miniflux + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} miniflux-ingress + @echo "" + @echo "=== PVC ===" + @kubectl get pvc -n {{NAMESPACE}} miniflux-postgres-pvc + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" || echo "Not found" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +# View logs from miniflux server (default 100 lines) +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=miniflux-server --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +# View logs from postgres +logs-postgres lines="100": + kubectl logs -n {{NAMESPACE}} -l app=miniflux-postgres --tail={{lines}} -f + +# Port forward to miniflux web UI +port-forward port="8080": + @echo "Forwarding miniflux to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/miniflux {{port}}:8080 + +# Port forward to postgres +port-forward-postgres port="5432": + @echo "Forwarding postgres to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/miniflux-postgres {{port}}:5432 + +# Trigger ArgoCD sync +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +# Show ArgoCD application details +argocd-status: + argocd app get {{APP_NAME}} --core + +# Restart miniflux server +restart: + @echo "Restarting miniflux server..." + kubectl rollout restart -n {{NAMESPACE}} deployment/miniflux-server + +# Restart postgres +restart-postgres: + @echo "Restarting postgres..." + kubectl rollout restart -n {{NAMESPACE}} deployment/miniflux-postgres + +# Execute psql in postgres pod +psql: + kubectl exec -it -n {{NAMESPACE}} deployment/miniflux-postgres -- psql -U miniflux diff --git a/f3s/opodsync/Justfile b/f3s/opodsync/Justfile index 3143637..7ae8875 100644 --- a/f3s/opodsync/Justfile +++ b/f3s/opodsync/Justfile @@ -1,12 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "opodsync" -CHART_PATH := "./helm-chart" +APP_NAME := "opodsync" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep opodsync + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} opodsync-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} opodsync-ingress + @echo "" + @echo "=== PVCs ===" + @kubectl get pvc -n {{NAMESPACE}} | grep opodsync + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=opodsync -c opodsync --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}}
\ No newline at end of file +port-forward port="8080": + @echo "Forwarding opodsync to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/opodsync-service {{port}}:8080 + +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting opodsync..." + kubectl rollout restart -n {{NAMESPACE}} deployment/opodsync diff --git a/f3s/radicale/Justfile b/f3s/radicale/Justfile index 6be7406..fbdbaa7 100644 --- a/f3s/radicale/Justfile +++ b/f3s/radicale/Justfile @@ -1,12 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "radicale" -CHART_PATH := "./helm-chart" +APP_NAME := "radicale" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep radicale + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} radicale-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} radicale-ingress + @echo "" + @echo "=== PVC ===" + @kubectl get pvc -n {{NAMESPACE}} radicale-data-pvc + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=radicale --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +port-forward port="5232": + @echo "Forwarding radicale to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/radicale-service {{port}}:5232 + +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting radicale..." + kubectl rollout restart -n {{NAMESPACE}} deployment/radicale diff --git a/f3s/syncthing/Justfile b/f3s/syncthing/Justfile index 4be94ee..a2ebcf4 100644 --- a/f3s/syncthing/Justfile +++ b/f3s/syncthing/Justfile @@ -1,12 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "syncthing" -CHART_PATH := "./helm-chart" +APP_NAME := "syncthing" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep syncthing + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} syncthing-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} syncthing-ingress + @echo "" + @echo "=== PVCs ===" + @kubectl get pvc -n {{NAMESPACE}} | grep syncthing + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=syncthing --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +port-forward port="8384": + @echo "Forwarding syncthing to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/syncthing-service {{port}}:8384 + +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting syncthing..." + kubectl rollout restart -n {{NAMESPACE}} deployment/syncthing diff --git a/f3s/tracing-demo/Justfile b/f3s/tracing-demo/Justfile index d1bc474..79d2cdd 100644 --- a/f3s/tracing-demo/Justfile +++ b/f3s/tracing-demo/Justfile @@ -16,26 +16,39 @@ push: # Build and push images build-push: build push -# Install Helm chart -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +# Trigger ArgoCD sync +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{RELEASE_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" -# Upgrade Helm chart -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} - -# Delete Helm release -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} - -# Rebuild images, import, and upgrade deployment -rebuild: build import upgrade +# Show ArgoCD application details +argocd-status: + argocd app get {{RELEASE_NAME}} --core # Check deployment status status: - kubectl get pods -n {{NAMESPACE}} | grep tracing-demo - kubectl get svc -n {{NAMESPACE}} | grep -E '(frontend|middleware|backend)-service' - kubectl get ingress -n {{NAMESPACE}} tracing-demo-ingress + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep tracing-demo + @echo "" + @echo "=== Services ===" + @kubectl get svc -n {{NAMESPACE}} | grep -E '(frontend|middleware|backend)-service' + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} tracing-demo-ingress + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{RELEASE_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" || echo "Not found" + +# Restart all pods +restart: + @echo "Restarting frontend..." + @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-frontend + @echo "Restarting middleware..." + @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-middleware + @echo "Restarting backend..." + @kubectl rollout restart -n {{NAMESPACE}} deployment/tracing-demo-backend # View logs from all services logs: diff --git a/f3s/webdav/Justfile b/f3s/webdav/Justfile index 3ee3d88..3a4de2f 100644 --- a/f3s/webdav/Justfile +++ b/f3s/webdav/Justfile @@ -1,14 +1,38 @@ NAMESPACE := "services" -RELEASE_NAME := "webdav" -CHART_PATH := "./helm-chart" +APP_NAME := "webdav" -install: - helm install {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} --create-namespace +status: + @echo "=== Pods ===" + @kubectl get pods -n {{NAMESPACE}} | grep webdav + @echo "" + @echo "=== Service ===" + @kubectl get svc -n {{NAMESPACE}} webdav-service + @echo "" + @echo "=== Ingress ===" + @kubectl get ingress -n {{NAMESPACE}} webdav-ingress + @echo "" + @echo "=== PVC ===" + @kubectl get pvc -n {{NAMESPACE}} webdav-data-pvc + @echo "" + @echo "=== ArgoCD Status ===" + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' 2>/dev/null && echo "" -upgrade: - helm upgrade {{RELEASE_NAME}} {{CHART_PATH}} --namespace {{NAMESPACE}} +logs lines="100": + kubectl logs -n {{NAMESPACE}} -l app=webdav --tail={{lines}} -f -delete: - helm uninstall {{RELEASE_NAME}} --namespace {{NAMESPACE}} +port-forward port="8080": + @echo "Forwarding webdav to localhost:{{port}}" + kubectl port-forward -n {{NAMESPACE}} svc/webdav-service {{port}}:8080 -deinstall: delete +sync: + @echo "Triggering ArgoCD sync..." + @kubectl annotate application {{APP_NAME}} -n cicd argocd.argoproj.io/refresh=normal --overwrite + @sleep 2 + @kubectl get application {{APP_NAME}} -n cicd -o jsonpath='Sync: {.status.sync.status}, Health: {.status.health.status}' && echo "" + +argocd-status: + argocd app get {{APP_NAME}} --core + +restart: + @echo "Restarting webdav..." + kubectl rollout restart -n {{NAMESPACE}} deployment/webdav |
