#!/bin/env python3
from MySQLdb import _mysql
import argparse
import socket
import sys

# TODO: filter by state
state_map = {
    'run':       3,
    'runn':      3,
    'running':   3,

    'poff':      8,
    'poweroff':  8,

    'done':      6,

    'suspended': 5,
    'susp':      5,
    'sus':       5,
}


def find_vms_with_iscsi_host(ip):
    db=_mysql.connect(db='opennebula')
    ip = db.escape_string(ip).decode()
    db.query(f"SELECT oid,name from vm_pool where ExtractValue(`body`,'//ISCSI_HOST')='{ip}' AND state <> 6")
    r = db.store_result()
    return r


def parse_args():
    parser = argparse.ArgumentParser( prog = 'oness',
                                      description = 'Filter OpenNebula VMs by Storage')
    parser.add_argument('-c', '--column', nargs='?', type=str, choices=["id", "name", "all"], default="name", help="Column to output (default: 'name')")
    parser.add_argument('storage', nargs=1, type=str, help="Storage short hostname (Example: 'slc-vm1-ss')")
    return parser.parse_args()

def main():
    args = parse_args()
    ss = args.storage[0]
    dc = ss[0:3]
    ip = socket.gethostbyname(f'{ss}.disk.{dc}.efscloud.net')
    result = find_vms_with_iscsi_host(ip)
    for oid, name in result.fetch_row(maxrows=0):

        name = name.decode()

        if   args.column == 'id':
            print(f'{oid}')

        elif args.column == 'name':
            print(f'{name}')

        else:
            print(f'{oid} - {name}')


if __name__ == '__main__':
    main()
