#!/usr/bin/env python
import crm_script as crm
import sys
import os

PACKAGES = ['nfs-client', 'nfs-kernel-server']
# 'nfs-utils', 'nfs4-acl-tools'


def run_collect():
    data = {}
    data['packages'] = crm.rpmcheck(PACKAGES)
    if os.path.isfile('/var/lib/nfs/etab'):
        data['etab'] = open('/var/lib/nfs/etab').read()
    data['status'] = True
    crm.exit_ok(data)


def run_validate():
    ret = {}
    data = crm.output(1)
    for host, info in data.iteritems():
        ret[host] = {}
        ret[host]['to_install'] = []
        ret[host]['installed'] = []
        for pkg in info['packages']:
            if 'error' in pkg:
                ret[host]['to_install'].append(pkg['name'])
            else:
                ret[host]['installed'].append(pkg['name'])

        #if 'nfs-kernel-server' in ret[host]['installed']:
            # check so nfs service is set to start at boot (?)

    # warn if exports already exists with conflicting entries?
    # maybe that's something for hawk...

    ret['status'] = True
    crm.exit_ok(ret)


def run_pre():
    me = crm.host()
    data = crm.output(2)
    if me not in data:
        crm.exit_fail("Hostname not in data set: '%s' not in '%s'" % (me, ', '.join(data.keys())))
    data = data[me]

    # prepare packages
    for pkg in data.get('to_install', []):
        crm.package(pkg, 'latest')
    for pkg in data.get('installed', []):
        crm.package(pkg, 'latest')

    # make sure NFS server service is set to start at boot (and is started)
    crm.service('nfsserver', 'enable')
    crm.service('nfsserver', 'start')

    crm.exit_ok({"status": True})


def run_post():
    rc, out, err = crm.call(['exportfs', '-v'])
    if rc != 0:
        crm.exit_fail("exportfs (rc=%d): %s%s" % (rc, out, err))

    crm.exit_ok({"exportfs": out})


if __name__ == "__main__":
    try:
        for step in sys.argv[1:]:
            apply(locals()['run_%s' % (step)], tuple())
    except Exception, e:
        crm.exit_fail("Error: %s" % (e))
