2017-10-17 30 views
0

세션 객체를 한 파일에서 다른 세션으로 전달하여 동일한 세션 객체를 사용하고 싶습니다. (목록 작성/VM 작성 등) 나는 Pickle (객체에 잠금 인스턴스가있는 것처럼 작동하지 않음)을 사용하여 시도했습니다. 나는 Cherrypy를 사용하여 객체를 쿠키로 저장할 수있게하려고 노력 중이다. (나는 이미 이름과 페드류를 위해하고있다.) 하지만 세션 개체 JSON 직렬화 할 수 없다는 오류가 나타납니다.OpenStack을 사용하여 세션 객체 전달 - 키스톤

이 오류를 어떻게 극복하고 세션 객체를 전달하는 올바른 방법입니까? 올바른 해결책이 아닌 경우 세션 객체를 전달하는 방법은 무엇입니까?

import cherrypy 
import ldap 
import xmlrpclib 
import xml.etree.ElementTree as ET 
from keystoneauth1 import loading 
from keystoneauth1 import session as session 
import novaclient.client as client 
import json 
import pickle 


NOVA_VERSION="2.1" 
KEYSTONE_URL = cherrypy.request.config.get("keystone") 
OPENSTACK_HOST = cherrypy.request.config.get("openstack_host") 
OPENSTACK_DEFAULT_DOMAIN = 
cherrypy.request.config.get("openstack_default_domain") 
loader = loading.get_plugin_loader('password') 
auth = loader.load_from_options(auth_url=KEYSTONE_URL, username=data.get("username"), password=data.get("password").replace(" ","%20"),user_domain_name=OPENSTACK_DEFAULT_DOMAIN) 
sess = session.Session(auth=auth) 
nova = client.Client(NOVA_VERSION,session=sess) 
data = { 
     'name' : name, 
     'fedid' : data.get("username"), 
     'sessionTest' : json.dumps(sess), 
     'expires' : EXPIRE 
    } 

오류 :

File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 656, in respond 
response.body = self.handler() 
File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py", line 188, in __call__ 
self.body = self.oldhandler(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/cherrypy/lib/jsontools.py", line 61, in json_handler 
value = cherrypy.serving.request._json_inner_handler(*args, **kwargs) 
File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 34, in __call__ 
return self.callable(*self.args, **self.kwargs) 
File "/var/www/frontend/controllers/api/user.py", line 102, in PUT 
'sessionTest' : json.dumps(sess), 
File "/usr/lib64/python2.7/json/__init__.py", line 243, in dumps 
return _default_encoder.encode(obj) 
File "/usr/lib64/python2.7/json/encoder.py", line 207, in encode 
chunks = self.iterencode(o, _one_shot=True) 
File "/usr/lib64/python2.7/json/encoder.py", line 270, in iterencode 
return _iterencode(o, 0) 
File "/usr/lib64/python2.7/json/encoder.py", line 184, in default 
raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: <keystoneauth1.session.Session object at 0x7f023003c710> is not JSON serializable 
+0

당신이 당신의 수입을 공유 할 수 loader하고 옵션하지만 피클 수 리시버

에서 인증 자격 증명을로드해야합니까? 어떤 모듈 id session.Session from – Tobey

+0

그냥 수입을 추가했습니다. 솔직히 말해서 모듈 ID를 찾는 방법이 너무 명확하지 않습니다. 건배, Matt :) – MRichards

+0

모듈이 keystoneauth1 – Tobey

답변

0

문제가 loader 개체입니다.

당신은 당신이 auth 객체

+0

내가 할 때 이전에 Pickle을 사용해 보았을 때와 같이 Lock 개체를 피클 할 수 없다는 TypeError가 발생했습니다. – MRichards