#!/usr/bin/python

"""Update the xvm-contacts list.

This script finds all e-mail addresses currently listed as contacts
for a VM and updates the xvm-contacts list to match, adding or
removing as necessary.
"""

import socket
import subprocess

from invirt import database
from invirt import remctl

def getContacts():
    contacts = set()

    for m in database.Machine.query():
        if '@' in m.contact:
            contacts.add(m.contact.lower())
        else:
            contacts.add(m.contact.lower() + '@mit.edu')

    return sorted(contacts)

def stripDomain(c):
    if c.endswith('@mit.edu'):
        return c[:-8]
    else:
        return c

def updateContacts(contacts):
    p = subprocess.Popen(['blanche', '-f', '-', 'xvm-contacts'],
                         stdin=subprocess.PIPE,
                         )

    p.communicate('\n'.join(stripDomain(c) for c in contacts))

def main():
    database.connect()
    subprocess.call(['kinit', '-k'])

    updateContacts(getContacts())

if __name__ == '__main__':
    main()