#!/usr/bin/env python3
"""Attrappe der Storage-Schicht.

pvesnap ruft `perl -e "<Skript>" <op> <args>` auf, um an PVE::Storage zu
kommen. Hier wird nur der Teil beantwortet, den die Bildschirmfotos brauchen -
Groessen und Pfade. Nichts wird angelegt oder geloescht.
"""

import sys

# Groessen der Datentraeger in der Kulisse, in Byte.
GROESSEN = {
    "vm-100-disk-0": 60, "vm-101-disk-0": 400, "vm-102-disk-0": 2048,
    "vm-105-disk-0": 250, "vm-130-disk-0": 80, "vm-120-disk-0": 120,
    "subvol-110-disk-0": 16, "subvol-111-disk-0": 64,
    "vm-9101-disk-0": 400, "vm-9102-disk-0": 250,
}
RAM = 32 * 1024 ** 3      # der gespeicherte Arbeitsspeicher von db01


def main(argv):
    # argv: -e <skript> <op> <rest...>
    rest = argv[2:] if len(argv) > 2 and argv[0] == "-e" else argv
    if not rest:
        return 1
    op, args = rest[0], rest[1:]

    if op == "size":
        volid = args[0] if args else ""
        name = volid.split(":", 1)[-1]
        if "-state-" in name:
            print("RESULT %d raw" % RAM)
        else:
            gigabyte = GROESSEN.get(name, 32)
            print("RESULT %d raw" % (gigabyte * 1024 ** 3))
        return 0

    if op == "path":
        volid = args[0] if args else ""
        storage, _, name = volid.partition(":")
        print("RESULT /dev/rbd/%s/%s" % (storage, name))
        return 0

    if op in ("activate", "deactivate", "free"):
        print("RESULT ok")
        return 0

    if op == "clone":
        volid = args[0] if args else ""
        storage = volid.split(":", 1)[0]
        print("RESULT %s:vm-%s-disk-0" % (storage, args[1] if len(args) > 1 else "0"))
        return 0

    if op == "alloc":
        print("RESULT %s:vm-%s-disk-9" % (args[0], args[1]))
        return 0

    print("unbekannte Operation: %s" % op, file=sys.stderr)
    return 1


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
