group.add_argument("--ignoreproject", dest="ignoreProjects", action="append", help="ignore volumes of given project.") group.add_argument("--onlyproject", dest="onlyProjects", action="append", help="only move volumes of given project.") myParser.add_argument("--dryrun",action="store_true", help="Just print out what would be done, but don't do it.") myParser.add_argument("--maxnum", default = 0, type=int, help="max number of Volumes to move.") myParser.add_argument("--untilfree", default = "0", help="move until # is free on spart.") myParser.add_argument("--rwvols", dest="moveRWVols", default=False, action="store_true", help="move rwvols with their accompanying ROs.") myParser.add_argument("--solitaryrovols", dest="moveSolitaryROVols", default=False, action="store_true", help="move solitary rovols.") myParser.add_argument("--minsize", dest="minVolumeUsage", default="0", help="only move volumes with minimalsize of") myParser.add_argument("--osdvolumes", dest="moveOSDVOlumes", default=False, action="store_true", help="also move OSD-Volumes") parseDefaultConfig(myParser) FS=OSDFsService() PS=ProjectService() VS=OSDVolService() VD=VolumeLLA() VlD=VLDbLLA() if not afs.defaultConfig.moveRWVols and not afs.defaultConfig.moveSolitaryROVols : sys.stderr.write("If you want to nmake me do anything, specify --rwvols and/or --solitaryrovols\n") sys.exit(1) if afs.defaultConfig.ignoreRX != None : ignoreRX=[] for rx in afs.defaultConfig.ignoreRX : try : ignoreRX.append(re.compile(rx)) except : sys.stderr.write("Cannot compile regular expression: '%s'\n" % rx) sys.exit(1) elif afs.defaultConfig.onlyRX != None :
from afs.lla.VLDbLLA import VLDbLLA from afs.lla.FileSystemLLA import FileSystemLLA myParser=argparse.ArgumentParser(parents=[afs.argParser], add_help=False) 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("--size", dest="VolumeSize", default="5000", help="Size of Volume in KB") myParser.add_argument("--mpt", dest="Mountpoint", help="Mountpoint for the new volume.") myParser.add_argument("--mpttype", dest="MountpointType", default="RW", choices=['RW', 'RO'], help="Type of mountpoint: RW or RO. Defaults to RW.") myParser.add_argument("--aclpath", dest="ACLOrigin", help="path in AFS to copy ACLs from.") myParser.add_argument("--prj", dest="ProjectName", help="Name of Project") 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) VD=VolumeLLA() 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
from afs.util.AfsConfig import parseDefaultConfig from afs.util.afsutil import parseHumanWriteableSize from afs.service.VolService import VolService from afs.model.Volume import Volume from afs.lla.VolumeLLA import VolumeLLA from afs.lla.VLDbLLA import VLDbLLA from afs.lla.FileSystemLLA import FileSystemLLA myParser = argparse.ArgumentParser( parents=[afs.argParser], description="nuke a volume. Remove RW and all ROs", add_help=False ) myParser.add_argument("--volname", dest="VolumeName", required=True, help="Name of Volume") parseDefaultConfig(myParser) VD = VolumeLLA() VS = VolService() try: VolGroup = VS.getVolGroup(afs.defaultConfig.VolumeName) except: print "Cannot get Volume group for %s. Are you sure it exists?" % afs.defaultConfig.VolumeName sys.exit(2) print "Removing volume %s on following sites:" % afs.defaultConfig.VolumeName print afs.defaultConfig.VolumeName, VolGroup["RW"][0].servername, VolGroup["RW"][0].part for v in VolGroup["RO"]: print v.servername, v.part