Files
SnarfCode/scripts/update_grafana_yaml.py

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!")