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
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))