from config import *
import time

def get_vm_activ():
    list_run_id=conn.listDomainsID()
    activ_vm=[]
    for id in list_run_id:
       dom=conn.lookupByID(id)
       activ_vm.append(dom.name())
    return activ_vm

def get_vm_inactiv():
    inactiv_vm=conn.listDefinedDomains()
    return inactiv_vm

def get_vm_list():
    full_vm = get_vm_activ() + get_vm_inactiv()
    return full_vm

def start_vm(vm_name):
    dom = conn.lookupByName(vm_name)
    dom.create()
    time.sleep(3)
    alive=0
    while alive < 3:
        if dom.isActive():
            alive=4
        else:
            time.sleep(3)
            alive+=1

def stop_vm(vm_name):
    dom = conn.lookupByName(vm_name)
    dom.shutdown()
    time.sleep(3)
    alive=0
    while alive < 5:
        if dom.isActive():
            time.sleep(3)
            alive+=1
        else:
            alive=6
    if dom.isActive():
        dom.destroy()

def get_vm_ips(vm_name):
    dom=conn.lookupByName(vm_name)
    if not dom:
        raise SystemExit("Failed to connect to Dom")
    try:
       ifaces = dom.interfaceAddresses(libvirt.VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT)
    except:
       ifaces = None
    result="--.--.--.--"
    if ifaces is None:
        result="--.--.--.--"
    else:
      for (name, val) in ifaces.items():
        if val['addrs']:
            for addr in val['addrs']:
              if addr['addr']:
                result=str(addr['addr'])+"/"+str(addr['prefix'])
              break
        else:
            result="-"
    return result

def destroy_vm(vm_name):
    dom=conn.lookupByName(vm_name)
    dom.undefine()
