130 lines
3.4 KiB
Python
130 lines
3.4 KiB
Python
import json
|
|
|
|
with open("homelab-gitops-repo/manifests/aerodrome/grafana/ai-stack-dashboard.json") as f:
|
|
dashboard_json = f.read()
|
|
|
|
with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml") as f:
|
|
content = f.read()
|
|
|
|
# Replace volumeMounts
|
|
old_mounts = """ volumeMounts:
|
|
- mountPath: /etc/grafana/grafana.ini
|
|
name: config
|
|
subPath: grafana.ini
|
|
- mountPath: /var/lib/grafana
|
|
name: storage"""
|
|
|
|
new_mounts = """ volumeMounts:
|
|
- mountPath: /etc/grafana/grafana.ini
|
|
name: config
|
|
subPath: grafana.ini
|
|
- mountPath: /var/lib/grafana
|
|
name: storage
|
|
- mountPath: /etc/grafana/provisioning/datasources/datasources.yaml
|
|
name: datasources-config
|
|
subPath: datasources.yaml
|
|
- mountPath: /etc/grafana/provisioning/dashboards/dashboards.yaml
|
|
name: dashboards-provider-config
|
|
subPath: dashboards.yaml
|
|
- mountPath: /var/lib/grafana-dashboards/ai-stack-dashboard.json
|
|
name: ai-stack-dashboard
|
|
subPath: ai-stack-dashboard.json"""
|
|
|
|
assert old_mounts in content, "old_mounts not found"
|
|
content = content.replace(old_mounts, new_mounts)
|
|
|
|
# Replace volumes
|
|
old_vols = """ volumes:
|
|
- configMap:
|
|
defaultMode: 420
|
|
name: grafana
|
|
name: config
|
|
- name: storage
|
|
persistentVolumeClaim:
|
|
claimName: grafana"""
|
|
|
|
new_vols = """ volumes:
|
|
- configMap:
|
|
defaultMode: 420
|
|
name: grafana
|
|
name: config
|
|
- name: storage
|
|
persistentVolumeClaim:
|
|
claimName: grafana
|
|
- configMap:
|
|
defaultMode: 420
|
|
name: grafana-datasources
|
|
name: datasources-config
|
|
- configMap:
|
|
defaultMode: 420
|
|
name: grafana-dashboards-provider
|
|
name: dashboards-provider-config
|
|
- configMap:
|
|
defaultMode: 420
|
|
name: grafana-dashboard-ai-stack
|
|
name: ai-stack-dashboard"""
|
|
|
|
assert old_vols in content, "old_vols not found"
|
|
content = content.replace(old_vols, new_vols)
|
|
|
|
# Append ConfigMaps at the bottom
|
|
extra_cms = f"""---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: grafana-datasources
|
|
namespace: default
|
|
labels:
|
|
app.kubernetes.io/name: grafana
|
|
data:
|
|
datasources.yaml: |
|
|
apiVersion: 1
|
|
datasources:
|
|
- name: Prometheus
|
|
type: prometheus
|
|
access: proxy
|
|
url: http://prometheus:9090
|
|
isDefault: true
|
|
jsonData:
|
|
timeInterval: 15s
|
|
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: grafana-dashboards-provider
|
|
namespace: default
|
|
labels:
|
|
app.kubernetes.io/name: grafana
|
|
data:
|
|
dashboards.yaml: |
|
|
apiVersion: 1
|
|
providers:
|
|
- name: 'ai-stack-provider'
|
|
orgId: 1
|
|
folder: 'AI Stack & Inference'
|
|
type: file
|
|
disableDeletion: false
|
|
editable: true
|
|
options:
|
|
path: /var/lib/grafana-dashboards
|
|
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: grafana-dashboard-ai-stack
|
|
namespace: default
|
|
labels:
|
|
app.kubernetes.io/name: grafana
|
|
data:
|
|
ai-stack-dashboard.json: |
|
|
{chr(10).join(' ' + line for line in dashboard_json.splitlines())}
|
|
"""
|
|
|
|
content = content.rstrip() + "\n" + extra_cms
|
|
|
|
with open("homelab-gitops-repo/manifests/aerodrome/grafana/grafana.yaml", "w") as f:
|
|
f.write(content)
|
|
|
|
print("Updated grafana.yaml successfully!")
|
|
|