#!/usr/bin/env python3
"""Listet alle laufenden (ACTIVE) VMs eines Projekts, ein Name pro Zeile.
--limit -1: Client holt via Marker-Pagination saemtliche Treffer.

Aufruf:  ./listvms.py [project-id]
Ohne project-id werden die Server des eigenen Auth-Scopes gelistet
(kein --project; funktioniert auch ohne Admin-Rechte).
Nutzt die openstack-CLI; Auth via Environment (OS_* Variablen).
Ausgabe ist als stdin fuer coldboot.py geeignet.
"""
import argparse
import json
import subprocess
import sys


def main():
    p = argparse.ArgumentParser(
        description="Alle laufenden VMs eines Projekts auflisten (ein Name pro Zeile).")
    p.add_argument("project_id", nargs="?", default=None,
                   help="OpenStack-Projekt-ID (Default: eigener Auth-Scope)")
    opts = p.parse_args()

    proj = ["--project", opts.project_id] if opts.project_id else []
    cmd = ["openstack", "server", "list", *proj,
           "--status", "ACTIVE",
           "--limit", "-1",
           "-f", "json"]
    r = subprocess.run(cmd, capture_output=True, text=True)
    if r.returncode != 0:
        sys.exit(f"{' '.join(cmd)}: {r.stderr.strip()}")

    for server in json.loads(r.stdout):
        print(server["Name"])


if __name__ == "__main__":
    main()
