#!/usr/bin/python
"""
Builds needed infrastructure to create cdsls, this contains creating directories and symbolic links. 
Does not include mounting of needed bindmounts. 
Uses an inventoryfile to get needed values. 
If inventoryfile does not exist, create it by using predefined defaultvalues and/or values which are specified via parameters. 
When using an existing inventoryfile, passing parameters which could be content of a inventoryfile will have no effect. 
These values would be ignored.
"""

__version__ = "$revision$"

import getopt
import sys
import logging
import xml

from comoonics import ComLog
import comoonics.cluster
from comoonics.cluster.ComClusterInfo import ClusterInfo
from comoonics.cluster.ComClusterRepository import ClusterRepository
from comoonics.cdsl import commonoptparseroptions, dirtrim
from comoonics.cdsl.ComCdslRepository import CdslRepository
# from comoonics import GetOpts

from optparse import OptionParser

parser = OptionParser(description=__doc__)
parser=commonoptparseroptions(parser)
parser.add_option("-t", "--cdsltree", default=None, dest="cdsltree", help="path for hostdependent cdsls")
parser.add_option("-s", "--cdsltreeshared", default=None, dest="cdsltreeshared", help="path for the reshared cdsls")
parser.add_option("-L", "--cdsllink", default=None, dest="cdsllink", help="path for the cdsl link.")
parser.add_option("-M", "--maxnodeidnum", default=0, dest="maxnodeidnum", type="int", help="Up to this nodeid node dirs are created")
parser.add_option("-N", "--usenodenames", default=False, dest="usenodenames", action="store_true", help="Use nodenames instead of nodeids.")
parser.add_option("-D", "--defaultdir", default=None, dest="defaultdir", help="set the default node directory.")
#parser.add_option("-p", "--nodeprefix", default=None, dest="nodeprefix", help="set the nodeprefix if needed")
parser.add_option("-C", "--onlyinventory", default=False, dest="onlyinventory", action="store_true", help="Only create the inventory file but don't create the filesystem structure.")

ComLog.setLevel(logging.INFO)
(options, args) = parser.parse_args()

if len(args) != 0:
    parser.error("No arguments are required. Please remove the arguments %s" %args)

if not options.usenodenames:
    _useNodeids = "True"
else:
    _useNodeids = "False"
    
doc=comoonics.cluster.parseClusterConf(options.clusterconf)
#create needed cluster objects
clusterRepository = ClusterRepository(doc.documentElement,doc)
clusterInfo = ClusterInfo(clusterRepository)

cdslRepository = CdslRepository(options.inventoryfile,None,False,cdsltree=options.cdsltree,cdsltreeshared=options.cdsltreeshared,cdsllink=options.cdsllink,maxnodeidnum=str(options.maxnodeidnum),usenodeids=_useNodeids,root=options.root,mountpoint=options.mountpoint,defaultdir=options.defaultdir)

if not options.onlyinventory:
    cdslRepository.buildInfrastructure(clusterInfo)