Esempio n. 1
0
def countActiveMachine(login_user=None):
    """起動中/起動処理中マシンの数を取得
		input: login_user:models.User
		return: int
	"""
    count = 0

    if login_user == None:
        return 0

    #Eucalyptus基盤へのアクセサを生成する
    get_euca_info = GetEucalyptusInfo(login_user)
    #ログインユーザのインスタンスの一覧を取得
    reservations = get_euca_info.get_instancelist()

    if not reservations:
        return 0

    for reservation in reservations:
        for instance in reservation.instances:
            if instance.state == u"pending" or instance.state == u"running":
                # Eucalyptus3.0では管理者(admin@eucalyptus)でも自アカウントのインスタンスのみ取得(verboseオプション無しの場合)
                count += 1


#				logger.debug("countActiveMachine:reservation.owner_id=%s" % reservation.owner_id)
#				if login_user.admin:
#					# 管理者の場合は他ユーザーのインスタンスも取得されるのでユーザーIDチェック
#					if reservation.owner_id == login_user.id:
#						count += 1
#				else:
#					count += 1

    return count
Esempio n. 2
0
def attach(request):
	"""取り付けボタン(ボリューム)"""

	#セッションからログインユーザ情報を取得する
	login_user = request.session['ss_usr_user']

	#セッション情報
	selected = request.session['ss_vol_volumes_selected']

	# エラー情報
	errors = []

	logger.info('データボリュームメニュー 仮想マシンへ取り付け 開始')

	#入力フォーム
	form = volume_form.VolumeAttachForm(request.POST)
	form.fields['machine'].widget.choices = request.session['ss_vol_machines']
	if not form.is_valid():
		tmp_errors = form.errors.values()
		for error in tmp_errors:
			errors.extend(error)
		logger.warn(errors)
		return render_to_response('attach_volume.html',{'form':form,'errors':errors},context_instance=RequestContext(request))

	machine = models.Machine.objects.get(pk=form.cleaned_data['machine'])
	if not machine:
		errors.append("不正な仮想マシンが選択されました。")
		logger.warn(errors)
		return render_to_response('attach_volume.html',{'form':form,'errors':errors},context_instance=RequestContext(request))

	# 取り付け先仮想マシンが起動中の場合
	if machine.instance_id:
		""" TODO:デバイス名を自動設定する
		"""
		device = form.cleaned_data['device'].encode('utf-8')
		#Eucalyptus操作
		try:
			#Eucalyptus基盤へのアクセサを生成する
			get_euca_info=GetEucalyptusInfo(login_user)

			#仮想マシンの現在ステータスを確認
			reservations = get_euca_info.get_instancelist(instance_ids=[machine.instance_id])
			if reservations:
				if reservations[0].instances[0].state == "running":

					# EBSボリュームアタッチ
					return_code = get_euca_info.attach_volume(volume_id=selected.db.volume_id, instance_id=machine.instance_id, device=device)

					if not return_code:
						errors.append("起動中の仮想マシンへのボリューム取り付けに失敗しました。")
						logger.warn(errors)
						return render_to_response('attach_volume.html',{'form':form,'errors':errors},context_instance=RequestContext(request))

					""" TODO:アタッチ状況が"attaching"->"attached"へ遷移するのを確認する"""

		except Exception, ex:
			# Eucalyptusエラー
			errors.append(euca_common.get_euca_error_msg('%s' % ex))
			logger.warn(errors)
			return render_to_response('attach_volume.html',{'form':form,'errors':errors},context_instance=RequestContext(request))