def countActiveVolume(login_user=None): """EBSボリューム利用量を取得 input: login_user:models.User return: int """ if login_user == None: return 0 db_volumes = "" # Eucalyptus3.0では管理者(admin@eucalyptus)でも自アカウントのEBSのみ取得(verboseオプション無しの場合) # if login_user.admin: # #ユーザが管理者属性の場合はDBに登録されているボリュームのみを取得 # db_volumes = Volume.objects.filter(user_id=login_user.id).values_list('volume_id', flat=True) # if not db_volumes: # return 0 #Eucalyptus基盤へのアクセサを生成する get_euca_info = GetEucalyptusInfo(login_user) #ログインユーザのボリュームの一覧を取得 volumes = get_euca_info.get_volumelist(db_volumes) #利用容量を集計 total = 0 for volume in volumes: total += volume.size #サイズ return total
def getVolumeList(login_user=None, rootDevice=False): """データボリューム(EBSボリューム)のリストを取得 input: login_user:models.User return: [volume_model.VolumeData] """ volumeList = [] if login_user == None: return [] #ボリュームのオブジェクトを取得する db_volumeList = models.Volume.objects.select_related(depth=1).filter(user_id=login_user.id).order_by('name') #Eucalyptus基盤へのアクセサを生成する get_euca_info=GetEucalyptusInfo(login_user) #ログインユーザのボリュームの一覧を取得 volumes = get_euca_info.get_volumelist() euca_metadata = EucalyptusMetadataDB() image_snapshot_list = euca_metadata.getImageSnapshotList() #DB情報とEucalyptusAPI情報を合成する for volume in volumes: if rootDevice != isRootDevice(volume, image_snapshot_list): continue volumeData = VolumeData() volumeData.size = volume.size #サイズ volumeData.root_device = rootDevice if volume.snapshot_id: volumeData.snapshot_id = volume.snapshot_id #スナップショットID volumeData.zone = volume.zone #availabilityZone volumeData.status = volume.status #ステータス volumeData.createTime = getDisplayTime(volume.create_time) #作成日時 if volume.status == 'in-use': volumeData.attached = True #アタッチフラグ volumeData.instance_id = volume.attach_data.instance_id #アタッチ時:インスタンスID volumeData.machine_name = getInstanceNameFromId(volume.attach_data.instance_id) volumeData.device = volume.attach_data.device #アタッチ時:デバイス volumeData.attach_status = volume.attach_data.status #アタッチ時:アタッチ状況 volumeData.attach_time = getDisplayTime(volume.attach_data.attach_time) #アタッチ時:アタッチ日時 for db_volume in db_volumeList: if volume.id == db_volume.volume_id: volumeData.db = db_volume if db_volume.machine: volumeData.machine_name = db_volume.machine.name #仮想マシン名 break else: # 内部DBに情報が存在しないEBSの場合 db_volume = models.Volume() db_volume.volume_id = volume.id db_volume.name = volume.id db_volume.account_id = login_user.account_id db_volume.user_id = login_user.id volumeData.db = db_volume #print pickle.dumps(volumeData) volumeList.append(volumeData) return volumeList