Esempio n. 1
0
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
Esempio n. 2
0
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