세션 객체를 한 파일에서 다른 세션으로 전달하여 동일한 세션 객체를 사용하고 싶습니다. (목록 작성/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
당신이 당신의 수입을 공유 할 수
loader
하고 옵션하지만 피클 수 리시버에서 인증 자격 증명을로드해야합니까? 어떤 모듈 id session.Session from – Tobey
그냥 수입을 추가했습니다. 솔직히 말해서 모듈 ID를 찾는 방법이 너무 명확하지 않습니다. 건배, Matt :) – MRichards
모듈이 keystoneauth1 – Tobey