#!/usr/bin/python

import subprocess
import os
import socket
from invirt.config import structs as config

def live_vms():
    p = subprocess.Popen(['/usr/sbin/xm', 'list'], stdout=subprocess.PIPE)
    p.wait()
    output = p.stdout.read()
    vms = [x.split()[0][2:] for x in output.splitlines() if x.startswith('d_')]
    return vms

def reload_conserver():
    p = subprocess.Popen(['/usr/sbin/invoke-rc.d', 'conserver-server', 'reload'], stdout=subprocess.PIPE)
    p.wait()

if __name__ == '__main__':
    hostname = socket.getfqdn().lower()
    realm = config.kerberos.realm
    principal = 'host/'+hostname+'@'+realm
    conftext = '\n'.join('console %s { master %s; }' % (vm, hostname)
                         for vm in live_vms())
    f = open('/etc/conserver/invirt-consoles.cf', 'w')
    f.write(conftext)
    f.close()
    reload_conserver()
    subprocess.call(['/usr/bin/kinit', '-k', '-t', '/etc/krb5.keytab',
                     principal])
    subprocess.call(['/usr/bin/remctl', config.console.hostname,
                     'console', 'update', conftext])
