#!/usr/bin/python

import sys
import os
import subprocess
import shutil
import errno
import fcntl

def createdir(vasa_dir):
    """
    Create a directory if it doesn't exist
    """
    if not os.path.exists(vasa_dir):
        os.makedirs(vasa_dir)
        os.chown(vasa_dir, 1, 1)
    #filename uid gid of the user to change to `id <username>`
    #daemon uid=1 gid=1
    os.chown(vasa_dir, 1, 1)

def updatedb(vasa_db, sql_schema, vasa_db_tmp, cmp_create_vasa_db):
    """
    Update and initialize database for VASA if it already exists
    """
    os.chown(sql_schema, 1, 1)
    vdb = subprocess.Popen(['/bin/sh'], stdin=subprocess.PIPE)
    (out,err) = vdb.communicate("%s %s %s %s" % (cmp_create_vasa_db, vasa_db,
                                                 sql_schema, vasa_db_tmp))
    x = vdb.wait()
    if x != 0:
        sys.stderr.write('Could not update vasa_db - Error Code: %d\n' % x) 
    os.chown(vasa_db, 1, 1)
    os.chmod(vasa_db, 0640)

def createfile(fpath):
    """
    Create the requested file in the given path
    Expects a complete file path
    """
    file = open(fpath, 'w')
    file.write('')
    file.close()
    os.chown(fpath, 1, 1)
    os.chmod(fpath, 0640)

def check_and_init_vasa():
    # Constants
    sql_schema         = '/usr/sbin/vasa_schema.sql'
    vasa_db            = '/ifs/.ifsvar/modules/isi_vasa/vasa.db'
    vasa_db_tmp        = '/tmp/vasa.db.tmp'
    vasa_db_lock       = '/ifs/.ifsvar/modules/isi_vasa/vasa.db.lock'    
    vasa_conf_dir      = '/ifs/.ifsvar/modules/isi_vasa'
    vasa_cert_dir      = '/ifs/.ifsvar/modules/isi_vasa/ssl_certs'
    cmp_create_vasa_db = '/usr/sbin/cmp_create_vasa_db'    

    if not os.path.exists(vasa_conf_dir):
        createdir(vasa_conf_dir)

    if not os.path.exists(vasa_cert_dir):
        createdir(vasa_cert_dir)

    updatedb(vasa_db, sql_schema, vasa_db_tmp, cmp_create_vasa_db)        

    if not os.path.exists(vasa_db_lock):
        createfile(vasa_db_lock)

def main():
    check_and_init_vasa()

if __name__ == '__main__':
    main()
