change File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 149, in open to folowing:
return six.StringIO(resp.text)
will raise:
Traceback (most recent call last):
File "vmware.py", line 149, in <module>
vmware = VirtualMachine('192.85.168.132', 'toolchain', password)
File "vmware.py", line 64, in __init__
interval=interval)
File "vmware.py", line 48, in __init__
self.sess = get_session(host, username, password, retries, interval)
File "vmware.py", line 19, in get_session
interval,
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 184, in __init__
self._create_session()
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 123, in func
return evt.wait()
File "/root/haven/env/lib/python3.4/site-packages/eventlet/event.py", line 121, in wait
return hubs.get_hub().switch()
File "/root/haven/env/lib/python3.4/site-packages/eventlet/hubs/hub.py", line 294, in switch
return self.greenlet.switch()
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/common/loopingcall.py", line 124, in _inner
idle = self.f(*self.args, **self.kw)
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 96, in _func
result = f(*args, **kwargs)
File "/root/haven/env/lib/python3.4/site-packages/oslo_concurrency/lockutils.py", line 271, in inner
return f(*args, **kwargs)
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 231, in _create_session
session_manager = self.vim.service_content.sessionManager
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 200, in vim
pool_maxsize=self._pool_size)
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/vim.py", line 44, in __init__
pool_maxsize)
File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 204, in __init__
cache=_CACHE)
File "/root/haven/env/lib/python3.4/site-packages/suds/client.py", line 115, in __init__
self.wsdl = reader.open(url)
File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 150, in open
d = self.fn(url, self.options)
File "/root/haven/env/lib/python3.4/site-packages/suds/wsdl.py", line 136, in __init__
d = reader.open(url)
File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 74, in open
d = self.download(url)
File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 100, in download
return sax.parse(string=content)
File "/root/haven/env/lib/python3.4/site-packages/suds/sax/parser.py", line 132, in parse
source.setByteStream(suds.BytesIO(string))
TypeError: 'str' does not support the buffer interface
if sys.version_info < (3, 0):
from cStringIO import StringIO as BytesIO
else:
from io import BytesIO
py2 using StringIO as BytesIO, but py3 using real BytesIO, so when "return six.StringIO(resp.text)" in oslo_vmware/service.py will pass StringIO to suds.BytesIO(string), will raise like above.
So, in order to make it work with suds, in oslo_vmware/service.py, we have to use six.BytesIO(resp.content) instead in py3.
change File "/root/ haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ service. py", line 149, in open to folowing:
return six.StringIO( resp.text)
will raise:
Traceback (most recent call last): '192.85. 168.132' , 'toolchain', password) interval) haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ api.py" , line 184, in __init__ _create_ session( ) haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ api.py" , line 123, in func haven/env/ lib/python3. 4/site- packages/ eventlet/ event.py" , line 121, in wait hub().switch( ) haven/env/ lib/python3. 4/site- packages/ eventlet/ hubs/hub. py", line 294, in switch switch( ) haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ common/ loopingcall. py", line 124, in _inner haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ api.py" , line 96, in _func haven/env/ lib/python3. 4/site- packages/ oslo_concurrenc y/lockutils. py", line 271, in inner haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ api.py" , line 231, in _create_session service_ content. sessionManager haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ api.py" , line 200, in vim maxsize= self._pool_ size) haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ vim.py" , line 44, in __init__ haven/env/ lib/python3. 4/site- packages/ oslo_vmware/ service. py", line 204, in __init__ haven/env/ lib/python3. 4/site- packages/ suds/client. py", line 115, in __init__ haven/env/ lib/python3. 4/site- packages/ suds/reader. py", line 150, in open haven/env/ lib/python3. 4/site- packages/ suds/wsdl. py", line 136, in __init__ haven/env/ lib/python3. 4/site- packages/ suds/reader. py", line 74, in open haven/env/ lib/python3. 4/site- packages/ suds/reader. py", line 100, in download string= content) haven/env/ lib/python3. 4/site- packages/ suds/sax/ parser. py", line 132, in parse setByteStream( suds.BytesIO( string) )
File "vmware.py", line 149, in <module>
vmware = VirtualMachine(
File "vmware.py", line 64, in __init__
interval=
File "vmware.py", line 48, in __init__
self.sess = get_session(host, username, password, retries, interval)
File "vmware.py", line 19, in get_session
interval,
File "/root/
self.
File "/root/
return evt.wait()
File "/root/
return hubs.get_
File "/root/
return self.greenlet.
File "/root/
idle = self.f(*self.args, **self.kw)
File "/root/
result = f(*args, **kwargs)
File "/root/
return f(*args, **kwargs)
File "/root/
session_manager = self.vim.
File "/root/
pool_
File "/root/
pool_maxsize)
File "/root/
cache=_CACHE)
File "/root/
self.wsdl = reader.open(url)
File "/root/
d = self.fn(url, self.options)
File "/root/
d = reader.open(url)
File "/root/
d = self.download(url)
File "/root/
return sax.parse(
File "/root/
source.
TypeError: 'str' does not support the buffer interface
as I dive into suds's source code, found this: /bitbucket. org/jurko/ suds/src/ 94664ddd46a61d0 6862fa8fb6ba7b9 e054214f57/ suds/__ init__. py?at=default& fileviewer= file-view- default# __init_ _.py-130
https:/
if sys.version_info < (3, 0):
from cStringIO import StringIO as BytesIO
else:
from io import BytesIO
py2 using StringIO as BytesIO, but py3 using real BytesIO, so when "return six.StringIO( resp.text) " in oslo_vmware/ service. py will pass StringIO to suds.BytesIO( string) , will raise like above.
So, in order to make it work with suds, in oslo_vmware/ service. py, we have to use six.BytesIO( resp.content) instead in py3.