#!/usr/bin/env python3
"""Export a volume inventory from each ONTAP cluster."""
import argparse
import csv
import getpass
import os

import requests
from requests.auth import HTTPBasicAuth
from ontap_api import inventory, records


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--inventory", required=True)
    parser.add_argument("--username", required=True)
    parser.add_argument("--ca-bundle")
    parser.add_argument("--out", default="volume-inventory.csv")
    args = parser.parse_args()
    session = requests.Session()
    session.auth = HTTPBasicAuth(args.username, os.environ.get("ONTAP_PASSWORD") or getpass.getpass("ONTAP password: "))
    session.verify = args.ca_bundle if args.ca_bundle else True
    result = []
    for cluster in inventory(args.inventory):
        endpoint = "/api/storage/volumes?fields=name,svm.name,state,space&max_records=1000"
        for volume in records(session, cluster["Address"], endpoint):
            space = volume.get("space", {})
            result.append({
                "Cluster": cluster["Cluster"],
                "SVM": volume.get("svm", {}).get("name"),
                "Volume": volume.get("name"),
                "State": volume.get("state"),
                "SizeGiB": round((space.get("size") or 0) / 1024**3, 2),
                "UsedGiB": round((space.get("used") or 0) / 1024**3, 2),
            })
    with open(args.out, "w", newline="", encoding="utf-8") as handle:
        writer = csv.DictWriter(handle, fieldnames=["Cluster", "SVM", "Volume", "State", "SizeGiB", "UsedGiB"])
        writer.writeheader()
        writer.writerows(result)
    print(f"Wrote {len(result)} volumes to {args.out}")


if __name__ == "__main__":
    main()
