29 lines
1.2 KiB
Python
29 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
import sys,yaml,re
|
|
inp,out=sys.argv[1],sys.argv[2]
|
|
with open(inp) as f: c=yaml.safe_load(f) or {}
|
|
rows=[]
|
|
for sname,svc in (c.get('services') or {}).items():
|
|
labels=svc.get('labels') or {}
|
|
if isinstance(labels,list):
|
|
d={}
|
|
for l in labels:
|
|
if '=' in str(l):k,v=str(l).split('=',1);d[k]=v
|
|
labels=d
|
|
routers={}
|
|
for k,v in labels.items():
|
|
m=re.match(r'traefik\.http\.routers\.([^.]+)\.(rule|entrypoints|tls|middlewares)$',k)
|
|
if m: routers.setdefault(m.group(1),{})[m.group(2)]=v
|
|
ports={}
|
|
for k,v in labels.items():
|
|
m=re.match(r'traefik\.http\.services\.([^.]+)\.loadbalancer\.server\.port$',k)
|
|
if m: ports[m.group(1)]=v
|
|
for r,rv in routers.items():
|
|
rows.append((sname,r,rv.get('rule',''),rv.get('entrypoints',''),rv.get('tls',''),rv.get('middlewares',''),ports.get(r,'')))
|
|
lines=["# Traefik Routes","", "| Service | Router | Rule | Entrypoints | TLS | Middlewares | Target Port |","|---|---|---|---|---|---|---|"]
|
|
if not rows:
|
|
lines=["# Traefik Routes","","No Traefik routes were detected."]
|
|
else:
|
|
for r in sorted(rows): lines.append('| '+' | '.join(str(x).replace('|','\\|') for x in r)+' |')
|
|
open(out,'w').write('\n'.join(lines)+'\n')
|