def choice(request, index): """ボリューム選択""" logger.info('データボリュームメニュー ボリューム選択開始') #セッションからログインユーザ情報を取得する #login_user = request.session['ss_usr_user'] # エラー情報 errors = [] # 選択されたボリューム activeIndex = int(index) #セッション情報 volumes = request.session['ss_vol_volumes'] if activeIndex < len(volumes): logger.debug('volume_id=%s' % volumes[activeIndex].db.volume_id) request.session['ss_vol_volumes_selected'] = volumes[activeIndex] form = volume_form.VolumeForm({'volume_id':volumes[activeIndex].db.volume_id, 'name':volumes[activeIndex].db.name, 'description':volumes[activeIndex].db.description}) request.session['ss_vol_snapshots_selected'] = None else: errors.append("不正なボリュームが選択されました。") logger.warn(errors) logger.info('データボリュームメニュー ボリューム選択成功') return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request))
def createsnapshot(request): """バックアップを作成ボタン(ボリューム)""" #セッションからログインユーザ情報を取得する login_user = request.session['ss_usr_user'] # エラー情報 errors = [] logger.info('データボリュームメニュー バックアップを作成 開始') #入力フォーム form = volume_form.VolumeForm(request.POST) form.is_valid() #セッション情報との一致チェック selected = request.session['ss_vol_volumes_selected'] if selected.db.volume_id != form.cleaned_data['volume_id']: errors.append("不正な画面遷移です。表示更新を行ってから再操作してください。") logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) #Eucalyptus操作 try: #Eucalyptus基盤へのアクセサを生成する get_euca_info=GetEucalyptusInfo(login_user) # スナップショット作成 created_snapshot = get_euca_info.create_snapshot(volume_id=selected.db.volume_id) except Exception, ex: # Eucalyptusエラー errors.append(euca_common.get_euca_error_msg('%s' % ex)) logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request))
def detach(request): """取り外しボタン(ボリューム)""" #セッションからログインユーザ情報を取得する login_user = request.session['ss_usr_user'] # エラー情報 errors = [] logger.info('データボリュームメニュー 仮想マシンから取り外し 開始') #入力フォーム form = volume_form.VolumeForm(request.POST) form.is_valid() #セッション情報との一致チェック selected = request.session['ss_vol_volumes_selected'] if selected.db.volume_id != form.cleaned_data['volume_id']: errors.append("不正な画面遷移です。表示更新を行ってから再操作してください。") logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) print selected.instance_id # 取り付け先の仮想マシンが起動中の場合 if selected.instance_id: #Eucalyptus操作 try: #Eucalyptus基盤へのアクセサを生成する get_euca_info=GetEucalyptusInfo(login_user) # EBSボリューム取り外し return_code = get_euca_info.detach_volume(volume_id=selected.db.volume_id, instance_id=selected.instance_id,force=True) if not return_code: errors.append("起動中の仮想マシンからのボリューム取り外しに失敗しました。") logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) """ TODO:アタッチ状況が"detaching"->"detached"->""(ステータス"available")へ遷移するのを確認する""" except Exception, ex: # Eucalyptusエラー errors.append(euca_common.get_euca_error_msg('%s' % ex)) logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request))
def update(request): """保存ボタン(ボリューム)""" #セッションからログインユーザ情報を取得する login_user = request.session['ss_usr_user'] # エラー情報 errors = [] logger.info('データボリュームメニュー プロパティ変更 保存開始') if request.method == 'POST': logger.info("request.method == Post") #入力フォーム form = volume_form.VolumeForm(request.POST) # 入力チェック 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('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) #セッション情報との一致チェック selected = request.session['ss_vol_volumes_selected'] if selected.db.volume_id != form.cleaned_data['volume_id']: errors.append("不正な画面遷移です。表示更新を行ってから再操作してください。") logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) # DB更新 selected.db.name = form.cleaned_data['name'] selected.db.description = form.cleaned_data['description'] updateVolume(selected.db) # ボリューム一覧を取得 try: volumes = getVolumeList(login_user) except Exception, ex: # Eucalyptusエラー errors = [euca_common.get_euca_error_msg('%s' % ex)] logger.warn(errors) volumes = []
def attachselect(request): """仮想マシンへ取り付けボタン(ボリューム)""" #セッションからログインユーザ情報を取得する login_user = request.session['ss_usr_user'] # エラー情報 errors = [] logger.info('データボリュームメニュー 仮想マシンへ取り付けフォーム作成 開始') #入力フォーム form = volume_form.VolumeForm(request.POST) form.is_valid() #セッション情報との一致チェック selected = request.session['ss_vol_volumes_selected'] if selected.db.volume_id != form.cleaned_data['volume_id']: errors.append("不正な画面遷移です。表示更新を行ってから再操作してください。") logger.warn(errors) return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) """ 次画面設定 """ # 入力フォーム form = volume_form.VolumeAttachForm() machines = models.Machine.objects.filter(group__user_id=login_user.id).values_list('id', 'name') form.fields['machine'].widget.choices = machines request.session['ss_vol_machines'] = machines if not machines: errors.append("選択可能な仮想マシンがありません。") logger.warn(errors) logger.info('データボリュームメニュー 仮想マシンへ取り付けフォーム作成 成功') return render_to_response('attach_volume.html',{'form':form,'errors':errors},context_instance=RequestContext(request))
def cancel(request): """キャンセルボタン""" #セッションからログインユーザ情報を取得する #login_user = request.session['ss_usr_user'] # エラー情報 errors = [] logger.info('データボリュームメニュー キャンセル 開始') """ TODO:キャンセル元画面のセッション情報削除 """ if request.session['ss_vol_snapshots_selected']: logger.info('データボリュームメニュー キャンセル 成功') return render_to_response('snapshot_list.html',{'errors':errors},context_instance=RequestContext(request)) else: selected = request.session['ss_vol_volumes_selected'] form = volume_form.VolumeForm({'volume_id':selected.db.volume_id, 'name':selected.db.name, 'description':selected.db.description}) logger.info('データボリュームメニュー キャンセル 成功') return render_to_response('volume_list.html',{'form':form, 'errors':errors},context_instance=RequestContext(request))
volumes = getVolumeList(login_user) except Exception, ex: # Eucalyptusエラー errors = [euca_common.get_euca_error_msg('%s' % ex)] logger.warn(errors) volumes = [] #セッション情報 request.session['ss_vol_volumes'] = volumes selected = request.session['ss_vol_volumes_selected'] if selected: for volume in volumes: if volume.db.volume_id == selected.db.volume_id: request.session['ss_vol_volumes_selected'] = volume form = volume_form.VolumeForm({'volume_id':volume.db.volume_id, 'name':volume.db.name, 'description':volume.db.description}) logger.info('データボリュームメニュー 表示更新(ボリューム)成功') return render_to_response('volume_list.html',{'form':form,'errors':errors},context_instance=RequestContext(request)) else: request.session['ss_vol_volumes_selected'] = None logger.info('データボリュームメニュー 表示更新(ボリューム)成功') return render_to_response('volume_list.html',{'errors':errors},context_instance=RequestContext(request)) def update(request): """保存ボタン(ボリューム)""" #セッションからログインユーザ情報を取得する login_user = request.session['ss_usr_user']