from afs.model.Partition import Partition from afs.model.ExtendedPartitionAttributes import ExtPartAttr from afs.dao.UbikPeerDAO import UbikPeerDAO from afs.dao.OSDVolumeDAO import OSDVolumeDAO myParser=argparse.ArgumentParser(parents=[afs.argParser], add_help=False) myParser.add_argument("--prj", dest="ProjectName", help="Name of Project") myParser.add_argument("--volname", dest="VolumeName", required=True, help="Name of Volume") myParser.add_argument("--voltype", dest="VolumeType", default="RW", help="Type of Volume") myParser.add_argument("--force", action='store_true', dest="force", default=False, help="force creation, even if Volume does not fit in given project") parseDefaultConfig(myParser) PS=ProjectService() # we get a list of Projects, sorted by the Nesting Level. # only get the most specific one PrjObj=PS.getProjectsByVolumeName(afs.defaultConfig.VolumeName)[0] if afs.defaultConfig.ProjectName != None : thisPrjObj=PS.getProjectByName(afs.defaultConfig.ProjectName) if thisPrjObj == None : myParser.error("Project \"%s\" does not exist" % afs.defaultConfig.ProjectName) if thisPrjObj.id != PrjObj.id : if not afs.defaultConfig.force : myParser.error("VolumeName \"%s\" not matched by given Project \"%s\"\n" % (afs.defaultConfig.VolumeName,afs.defaultConfig.ProjectName)) sys.exit(1) PrjObj = thisPrjObj print (PS.getNewVolumeLocation(thisPrjObj.name,afs.defaultConfig.VolumeType))
VlD=VLDbLLA() FsD=FileSystemLLA() VolumeType = afs.defaultConfig.VolumeType if afs.defaultConfig.VolumeName[-9:] == ".readonly" : VolumeName = afs.defaultConfig.VolumeName[:-9] VolumeType = "RO" else : VolumeName = afs.defaultConfig.VolumeName VolSize=parseHumanWriteableSize(afs.defaultConfig.VolumeSize)/1024 PS=ProjectService() # we get a list of Projects, sorted by the Nesting Level. # only get the most specific one PrjObj=PS.getProjectsByVolumeName(VolumeName)[0] if afs.defaultConfig.ProjectName != None : thisPrjObj=PS.getProjectByName(afs.defaultConfig.ProjectName) if thisPrjObj == None : myParser.error("Project \"%s\" does not exist" % afs.defaultConfig.ProjectName) if thisPrjObj.id != PrjObj.id : if not afs.defaultConfig.force : myParser.error("VolumeName \"%s\" not matched by given Project \"%s\"\n" % (VolumeName,afs.defaultConfig.ProjectName)) sys.exit(1) PrjObj = thisPrjObj if not PrjObj : sys.stderr.write("Cannot guess Project for volume %s" % VolumeName) VolObj=Volume() VolObj.name=VolumeName VolObj.type=VolumeType
if afs.defaultConfig.moveRWVols : for v in RWVols : # check for name with given regex, these checks are mutually exclusive. skip_it=False if afs.defaultConfig.ignoreRX != None : skip_it=False for rx in ignoreRX : if rx.match(v["name"]) : skip_it = True elif afs.defaultConfig.onlyRX != None : skip_it=True for rx in onlyRX : if rx.match(v["name"]) : skip_it = False elif afs.defaultConfig.onlyProjects != None : skip_it=True volProjects=PS.getProjectsByVolumeName(v["name"]) for prj in volProjects : if prj.name in afs.defaultConfig.onlyProjects : skip_it = False elif afs.defaultConfig.ignoreProjects != None : skip_it=False volProjects=PS.getProjectsByVolumeName(v["name"]) for prj in volProjects : if prj.name in afs.defaultConfig.ignoreProjects : skip_it = True if skip_it : continue # check for moving osd-volumes if v.get("osdPolicy",0) != 0 : if not afs.defaultConfig.moveOSDVOlumes : print "Skipping %s, because it is an OSD-Volume" % v["name"] continue