25 lines
1.6 KiB
Python
25 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
import sys, yaml
|
|
from datetime import datetime, timezone
|
|
|
|
def md(v): return str(v).replace('|','\\|') if v is not None else ''
|
|
|
|
inp,out=sys.argv[1],sys.argv[2]
|
|
with open(inp) as f: c=yaml.safe_load(f) or {}
|
|
svcs=c.get('services',{}) or {}
|
|
nets=c.get('networks',{}) or {}
|
|
vols=c.get('volumes',{}) or {}
|
|
lines=["# Docker Compose Inventory","",f"Generated: {datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')}","","## Summary","","| Item | Count |","|---|---:|",f"| Services | {len(svcs)} |",f"| Networks | {len(nets)} |",f"| Volumes | {len(vols)} |","","## Services","","| Service | Container | Image | Build | Profiles | Networks | Ports | Restart |","|---|---|---|---|---|---|---|---|"]
|
|
for n,s in sorted(svcs.items()):
|
|
build=s.get('build','')
|
|
if isinstance(build,dict): build=build.get('context','')
|
|
ports=', '.join(str(p) for p in s.get('ports',[]) )
|
|
networks=', '.join((s.get('networks') or {}).keys() if isinstance(s.get('networks'),dict) else (s.get('networks') or []))
|
|
profiles=', '.join(s.get('profiles',[]) or [])
|
|
lines.append(f"| {md(n)} | {md(s.get('container_name',''))} | {md(s.get('image',''))} | {md(build)} | {md(profiles)} | {md(networks)} | {md(ports)} | {md(s.get('restart',''))} |")
|
|
lines += ["","## Networks","","| Network | Driver | External |","|---|---|---|"]
|
|
for n,v in sorted(nets.items()): lines.append(f"| {md(n)} | {md((v or {}).get('driver',''))} | {md((v or {}).get('external',False))} |")
|
|
lines += ["","## Volumes","","| Volume | External |","|---|---|"]
|
|
for n,v in sorted(vols.items()): lines.append(f"| {md(n)} | {md((v or {}).get('external',False))} |")
|
|
open(out,'w').write('\n'.join(lines)+'\n')
|