示例#1
0
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))
示例#2
0
    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 VolObj.type == "RW" :
    RWServ,RWPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj))
    print "Creating new volume %s of type %s on %s %s with size %d" % (VolObj.name, VolObj.type, RWServ,RWPart,VolSize)
    VD.create(VolObj.name,RWServ,RWPart,VolSize)
    print "Creating accompanying RO"
    VlD.addsite(VolObj.name,RWServ,RWPart)
    # XXX it's a bit shitty, but we have to release after each addsite for now, since we get the locations from vos examine atm and not from vos listvldb
    VD.release(VolObj.name)
    for i in range(1,PrjObj.minnum_ro) :
        print "Creating additional RO-copy number %s" % i
        ROServ,ROPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj))
        VlD.addsite(VolObj.name,ROServ,ROPart)
        VD.release(VolObj.name)
elif VolObj.type == "RO" :
    ROServ,ROPart=(PS.getNewVolumeLocation(PrjObj.name,VolObj))
    print "Creating new volume %s of type %s on %s %s" % (VolObj.name, VolObj.type, ROServ,ROPart)
    VlD.addsite(VolObj.name,ROServ,ROPart)
示例#3
0
     if int(v.get("diskused")) < minUsage : 
         print "Skipping %s, because it is smaller than %s" % (v["name"], minUsage)
         continue
 
 # remove osd-attributes from dict, create Obj
 v.pop("filequota")
 v.pop("osdPolicy")
 v["serv_uuid"]=afs.LookupUtil[afs.defaultConfig.CELL_NAME].getFSUUID(v["servername"])
 VolObj.setByDict(v)
 if dstFS == None :
     minNestingLevel=-1 # NestingLevel should be "spezifizitaet"
     for p in PS.getProjectsByVolumeName(v["name"]) :
         if p.NestingLevel <  minNestingLevel or  minNestingLevel == -1 :
             minNestingLevel =  p.NestingLevel
             PrjObj=p
     dstSrv,dstP = PS.getNewVolumeLocation(PrjObj.name,VolObj)
     if dstSrv == None :
         sys.stderr.write("found no appropriate location for %s, part of project %s. Skipping\n" % (VolObj.name,PrjObj.name))
         continue
 else :
     dstSrv = dstFS.servernames[0]
     parts=FS.getPartitions(dstSrv)
     if reqDstPart == None :
         maxFree=0
         for p in parts :
             if parts[p]["free"] > maxFree :
                 dstP=p
                 maxFree=parts[p]["free"] 
     else :
         dstP=reqDstPart      
 print "moving volume %s from %s %s to %s %s" % (v["name"],srcFS.servernames[0],srcP,dstSrv,dstP)