Set up Ansible homelab infrastructure

- Inventory based on tailscale
- Structure of the project
This commit is contained in:
Damien
2026-06-01 10:02:17 +02:00
commit cfacc40854
13 changed files with 105 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
#!/usr/bin/env python3
"""
Dynamic Ansible inventory via local tailscale status.
Only includes peers tagged with tag:homelab.
Groups: online, offline, <os>
"""
import json
import subprocess
FILTER_TAG = "tag:homelab"
def run():
raw = subprocess.check_output(["tailscale", "status", "--json"])
data = json.loads(raw)
inv = {
"_meta": {"hostvars": {}},
"all": {"hosts": [], "children": ["online", "offline"]},
"online": {"hosts": []},
"offline": {"hosts": []},
}
for peer in data.get("Peer", {}).values():
# Filtre sur le tag
tags = peer.get("Tags") or []
if FILTER_TAG not in tags:
continue
name = peer["HostName"]
ip = peer["TailscaleIPs"][0]
up = peer.get("Online", False)
inv["all"]["hosts"].append(name)
inv["online" if up else "offline"]["hosts"].append(name)
inv["_meta"]["hostvars"][name] = {
"ansible_host": ip,
}
print(json.dumps(inv, indent=2))
if __name__ == "__main__":
run()