#!/usr/bin/python

import sys
import subprocess
import isi.sys.bootdisk as bootdisk
import isi.sys.disk as disk

def unload_imdd_ko():
    try:
        subprocess.check_call(['kldunload', 'imdd'])
    except subprocess.CalledProcessError:
        sys.stderr.write('Error unloading imdd.ko!\n')

def startup():
    bootdisk.startup()
    disk.startup()

def main():
    unload_imdd_ko()
    mesh = disk.mesh
    while True:
        prev_hash = mesh.hash
        try:
            startup()
            break
        except bootdisk.UnbootableBootdiskException, e:
            sys.stdout.write(e.bootdisk_message + '\n')
            sys.exit(1)
        except:
            mesh.refresh()
            if mesh.hash == prev_hash:
                raise

if __name__ == '__main__':
    main()
