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 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))
def get_volume_list(rc, output, outerr, parseParamList, Logger) : if rc : raise FileServerLLAError("Error",outerr) # first line gives Name, ID, Type, Used and Status volList = [] dateT=datetime.datetime(1970, 1, 1) i = 0 while i < len(output): while output[i] != "BEGIN_OF_ENTRY": i = i+1 if i >= len(output): break if i >= len(output): break #Beginnig block splits = output[i].split() if splits[0] == "BEGIN_OF_ENTRY": vol = Volume() splits = output[i+1].split() # Invalid volume, something wrong if splits[0] != 'name': #vol['valid'] = False if splits[0] == 'id': vol.vid = int(splits[1]) splits = output[i+2].split() if splits[0] == 'serv': vol.servername = splits[1] splits = output[i+3].split() if splits[0] == 'part': vol.part = misc.canonicalize_partition(splits[1]) splits = output[i+4].split() if splits[0] == 'status': vol.status = splits[1] while output[i] != "END_OF_ENTRY": i = i+1 # Valid volume else: vol.vid = "UNSET" try: vol.name = splits[1] splits = output[i+2].split() vol.vid = int(splits[1]) splits = output[i+3].split() except : # XXX Here we need a flag to show that parsing was not complete # or a list of Volumes which need to be reparsed. # this will be in the return-code while output[i] != "END_OF_ENTRY": i = i+1 Logger.error("Cannot parse name of volume with id=%s! Skipping." % vol.vid) continue if len(splits) > 2: vol.servername = splits[2] else: #Only ip is available vol.servername = splits[1] splits = output[i+4].split() vol.partition = misc.canonicalize_partition(splits[1]) splits = output[i+5].split() vol.status = splits[1] if vol.status != "OK" : while output[i] != "END_OF_ENTRY": i = i+1 continue splits = output[i+6].split() vol.backup_id = int(splits[1]) splits = output[i+7].split() vol.parent_id = int(splits[1]) splits = output[i+8].split() vol.clone_id = int(splits[1]) splits = output[i+9].split() vol.in_use = splits[1] splits = output[i+10].split() vol.needs_salvage = splits[1] splits = output[i+11].split() vol.destroy_me = splits[1] splits = output[i+12].split() vol.type = splits[1] splits = output[i+13].split() vol.creation_date = dateT.fromtimestamp(float(splits[1])) splits = output[i+14].split() vol.access_date = dateT.fromtimestamp(float(splits[1])) splits = output[i+15].split() vol.update_date = dateT.fromtimestamp(float(splits[1])) splits = output[i+16].split() vol.backup_date = dateT.fromtimestamp(float(splits[1])) splits = output[i+17].split() vol.copy_date = dateT.fromtimestamp(float(splits[1])) splits = output[i+18].split() vol.flags = splits[1] splits = output[i+19].split() vol.diskused = int(splits[1]) splits = output[i+20].split() vol.maxquota = int(splits[1]) splits = output[i+21].split() vol.minquota = int(splits[1]) splits = output[i+22].split() vol.filecount = int(splits[1]) splits = output[i+23].split() vol.day_use = int(splits[1]) splits = output[i+24].split() vol.week_use = int(splits[1]) splits = output[i+25].split() vol.spare2 = splits[1] splits = output[i+26].split() vol.spare3 = splits[1] i = i+26 volList.append(vol) return volList