feat: add homelab deployment configs, documentation, and automation scripts
This commit is contained in:
250
scripts/apply_full_homepage.py
Normal file
250
scripts/apply_full_homepage.py
Normal file
@@ -0,0 +1,250 @@
|
||||
import yaml
|
||||
|
||||
def str_presenter(dumper, data):
|
||||
if '\n' in data:
|
||||
return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
|
||||
return dumper.represent_scalar('tag:yaml.org,2002:str', data)
|
||||
|
||||
yaml.add_representer(str, str_presenter)
|
||||
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)
|
||||
|
||||
with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'r', encoding='utf-8') as f:
|
||||
text = f.read()
|
||||
|
||||
docs = list(yaml.safe_load_all(text))
|
||||
cm = docs[2]
|
||||
|
||||
services_yaml = """- Critical Services:
|
||||
- Authentik:
|
||||
icon: authentik.png
|
||||
href: https://authentik.snarfnet.net
|
||||
description: SSO & Identity Management
|
||||
- PeaNUT UPS:
|
||||
icon: peanut.png
|
||||
href: https://portal.snarfnet.net
|
||||
description: UPS Power & Battery Monitor
|
||||
- Unifi Controller:
|
||||
icon: unifi.png
|
||||
href: https://unifi.ui.com
|
||||
widget:
|
||||
type: unifi
|
||||
url: https://140.44.44.1
|
||||
username: Snarf
|
||||
password: Katzir476!!!
|
||||
|
||||
- GitOps & Automation:
|
||||
- Gitea:
|
||||
icon: gitea.png
|
||||
href: https://git.snarfnet.net
|
||||
description: Git Repositories
|
||||
widget:
|
||||
type: gitea
|
||||
url: https://git.snarfnet.net
|
||||
key: f19e772cf54e40ceb2befe452e2bc24dd81fdb71
|
||||
- ArgoCD:
|
||||
icon: argocd.png
|
||||
href: https://argo.snarfnet.net
|
||||
description: Declarative GitOps Reconciler
|
||||
widget:
|
||||
type: argocd
|
||||
url: https://argo.snarfnet.net
|
||||
key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJob21lcGFnZTphcGlLZXkiLCJuYmYiOjE3OTQ1MDIwNzgsImlhdCI6MTc5NDUwMjA3OCwianRpIjoiZjQ2NzU0NjMtODRhOS00MjI0LWI3ODItNmY5ODQxYWEwY2UxIn0.aHhrny2RBG-vAJAyXMvan0jw65jkP3bguqEduaG78O0
|
||||
- AWX Automation:
|
||||
icon: awx.png
|
||||
href: https://awx.snarfnet.net
|
||||
description: Ansible Automation Controller
|
||||
- Semaphore:
|
||||
icon: semaphore.png
|
||||
href: https://semaphore.snarfnet.net
|
||||
description: Playbook Execution Engine
|
||||
|
||||
- Storage & Clusters:
|
||||
- Longhorn Aerodrome:
|
||||
icon: longhorn.png
|
||||
href: https://longhorn.aerodrome.snarfnet.net
|
||||
description: Aerodrome Distributed Flash Storage
|
||||
- Longhorn Spaceport:
|
||||
icon: longhorn.png
|
||||
href: https://longhorn.spaceport.snarfnet.net
|
||||
description: Spaceport Distributed Block Storage
|
||||
- Rancher (Aerodrome):
|
||||
icon: rancher.png
|
||||
href: https://aerodrome.snarfnet.net
|
||||
description: Kubernetes Management Console
|
||||
widget:
|
||||
type: customapi
|
||||
url: https://aerodrome.snarfnet.net/v3/clusters/local
|
||||
headers:
|
||||
Authorization: "Bearer kubeconfig-u-aqzkufonck4hmbd:bw22b96nv8844k8w5r8lzpz8gnk22tjwj95j6nkzr7hd5dhm4bs6z7"
|
||||
mappings:
|
||||
- field: capacity.cpu
|
||||
label: CPU Cores
|
||||
- field: capacity.pods
|
||||
label: Max Pods
|
||||
- field: state
|
||||
label: Cluster State
|
||||
- Harvester HCI (Spacedock):
|
||||
icon: harvester.png
|
||||
href: https://harvester.spacedock.snarfnet.net
|
||||
description: HCI Virtualization Hypervisors
|
||||
widget:
|
||||
type: customapi
|
||||
url: https://aerodrome.snarfnet.net/v3/clusters/c-cclnt
|
||||
headers:
|
||||
Authorization: "Bearer kubeconfig-u-aqzkufonck4hmbd:bw22b96nv8844k8w5r8lzpz8gnk22tjwj95j6nkzr7hd5dhm4bs6z7"
|
||||
mappings:
|
||||
- field: capacity.cpu
|
||||
label: CPU Cores
|
||||
- field: capacity.pods
|
||||
label: Max Pods
|
||||
- field: state
|
||||
label: HCI State
|
||||
- Portainer Swarm:
|
||||
icon: portainer.png
|
||||
href: https://shipyard.snarfnet.net
|
||||
description: Docker Swarm Container Fleet
|
||||
widget:
|
||||
type: portainer
|
||||
url: https://140.44.4.71:9443
|
||||
env: 3
|
||||
key: ptr_TCVm8ujeB4zT0oRejyMCwKw5enaPG/uKj1KuF0uOWX8=
|
||||
|
||||
- Infrastructure & Observability:
|
||||
- NGINX Proxy Manager:
|
||||
icon: nginx-proxy-manager
|
||||
href: https://nginx.snarfnet.net
|
||||
description: Reverse Proxy & SSL Certificates
|
||||
- Uptime Kuma:
|
||||
icon: uptime-kuma
|
||||
href: https://uptime.snarfnet.net
|
||||
description: Multi-Endpoint Availability Probes
|
||||
widget:
|
||||
type: uptimekuma
|
||||
url: http://140.44.4.28:448
|
||||
slug: default
|
||||
- Zabbix:
|
||||
icon: zabbix.png
|
||||
href: https://zabbix.snarfnet.net
|
||||
description: Infrastructure Metrics & Alarms
|
||||
- Grafana:
|
||||
icon: grafana.png
|
||||
href: https://grafana.snarfnet.net
|
||||
description: Real-Time Metrics & AI Dashboards
|
||||
widget:
|
||||
type: grafana
|
||||
url: https://grafana.snarfnet.net
|
||||
username: admin
|
||||
password: Katzir476!!!
|
||||
- Core Node Glances:
|
||||
icon: glances.png
|
||||
href: http://140.44.4.11:61208
|
||||
description: Host Resource Monitor
|
||||
|
||||
- Environment & Weather:
|
||||
- Tempest Weather Station:
|
||||
icon: weather.png
|
||||
href: https://snarfhome.snarfnet.net
|
||||
description: Backyard Weather Telemetry
|
||||
widget:
|
||||
type: homeassistant
|
||||
url: http://14.4.4.20:8123
|
||||
key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIzZWUyNTE1MDk0NGU0ZjRjYmJkMGM1MWI5MThmY2EzYiIsImlhdCI6MTc0NjgxMDM3NSwiZXhwIjoyMDYyMTcwMzc1fQ.Le6M7WL63nxtLTxccFacQR5GVUY5C-a_zGtmXT_uaz4
|
||||
custom:
|
||||
- template: "{{ states('sensor.st_00158555_temperature') | float(0) | round(1) }} °F"
|
||||
label: Outdoor Temp
|
||||
- template: "{{ states('sensor.st_00158555_feels_like') | float(0) | round(1) }} °F"
|
||||
label: Feels Like
|
||||
- template: "{{ states('sensor.st_00158555_humidity') | float(0) | round(1) }} %"
|
||||
label: Humidity
|
||||
- template: "{{ states('sensor.st_00158555_wind_speed') | float(0) | round(1) }} mph"
|
||||
label: Wind Speed
|
||||
"""
|
||||
|
||||
settings_yaml = """title: SnarfNet Operations & Telemetry
|
||||
headerStyle: boxed
|
||||
color: slate
|
||||
theme: dark
|
||||
statusStyle: badge
|
||||
background:
|
||||
image: https://i.imgur.com/hOzzkCY.jpeg
|
||||
blur: sm
|
||||
opacity: 50
|
||||
brightness: 50
|
||||
cardBlur: sm
|
||||
quicklaunch:
|
||||
searchDescriptions: true
|
||||
hideInternetSearch: true
|
||||
hideVisitURL: true
|
||||
hideVersion: true
|
||||
layout:
|
||||
Critical Services:
|
||||
icon: mdi-shield-check
|
||||
style: row
|
||||
columns: 3
|
||||
GitOps & Automation:
|
||||
icon: mdi-git
|
||||
style: row
|
||||
columns: 4
|
||||
Storage & Clusters:
|
||||
icon: mdi-server-network
|
||||
style: row
|
||||
columns: 3
|
||||
Infrastructure & Observability:
|
||||
icon: mdi-chart-timeline-variant
|
||||
style: row
|
||||
columns: 3
|
||||
Environment & Weather:
|
||||
icon: mdi-weather-partly-cloudy
|
||||
style: row
|
||||
columns: 1
|
||||
showStats: true
|
||||
providers:
|
||||
longhorn:
|
||||
url: http://longhorn-backend.longhorn-system.svc.cluster.local:9500
|
||||
"""
|
||||
|
||||
widgets_yaml = """- kubernetes:
|
||||
cluster:
|
||||
show: true
|
||||
cpu: true
|
||||
memory: true
|
||||
show_names: true
|
||||
nodes:
|
||||
show: false
|
||||
- longhorn:
|
||||
total: true
|
||||
nodes: false
|
||||
- resources:
|
||||
label: System
|
||||
backend: resources
|
||||
cpu: true
|
||||
expanded: true
|
||||
memory: true
|
||||
disk: /
|
||||
- search:
|
||||
provider: duckduckgo
|
||||
target: _blank
|
||||
"""
|
||||
|
||||
bookmarks_yaml = """- Quick Links:
|
||||
- GitHub:
|
||||
- abbr: GH
|
||||
href: https://github.com/
|
||||
- UniFi Site Manager:
|
||||
- abbr: UI
|
||||
href: https://unifi.ui.com/
|
||||
- Cloudflare:
|
||||
- abbr: CF
|
||||
href: https://dash.cloudflare.com/
|
||||
"""
|
||||
|
||||
cm['data']['services.yaml'] = services_yaml
|
||||
cm['data']['settings.yaml'] = settings_yaml
|
||||
cm['data']['widgets.yaml'] = widgets_yaml
|
||||
cm['data']['bookmarks.yaml'] = bookmarks_yaml
|
||||
cm['data']['kubernetes.yaml'] = "mode: cluster\n"
|
||||
|
||||
with open('homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml', 'w', encoding='utf-8') as f:
|
||||
yaml.dump_all(docs, f, sort_keys=False, default_flow_style=False, allow_unicode=True)
|
||||
|
||||
print("Saved clean homelab-gitops-repo/manifests/spaceport/homepage/homepage.yaml successfully!")
|
||||
Reference in New Issue
Block a user