Comment 1 for bug 1819665

Revision history for this message
Michele Baldessari (michele) wrote :

Here is a smaller reproducer (aka one that uses the newly-introduced wrappers for swift)
(undercloud) [stack@undercloud-0 ~]$ echo 'test' > /tmp/foo
(undercloud) [stack@undercloud-0 ~]$ python3 prova.py
Traceback (most recent call last):
  File "/usr/lib64/python3.6/http/client.py", line 986, in send
    self.sock.sendall(data)
TypeError: a bytes-like object is required, not 'str'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "prova.py", line 26, in <module>
    swiftutils.put_object_string(conn, 'overcloud', 'foo', file_content)
  File "/usr/lib/python3.6/site-packages/tripleo_common/utils/swift.py", line 192, in put_object_string
    return swift.put_object(container, object_name, contents)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 1895, in put_object
    response_dict=response_dict)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 1737, in _retry
    service_token=self.service_token, **kwargs)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 1364, in put_object
    conn.putrequest(path, headers=headers, data=data)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 468, in putrequest
    return self.request('PUT', full_path, data, headers, files)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 458, in request
    files=files, **self.requests_args)
  File "/usr/lib/python3.6/site-packages/swiftclient/client.py", line 441, in _request
    return self.request_session.request(*arg, **kwarg)
  File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 524, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 637, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 472, in send
    low_conn.send(i)
  File "/usr/lib64/python3.6/http/client.py", line 990, in send
    self.sock.sendall(d)
TypeError: a bytes-like object is required, not 'str'
(undercloud) [stack@undercloud-0 ~]$ cat prova.py
from keystoneauth1 import session
from keystoneauth1.identity import v3
from swiftclient.client import Connection
from tripleo_common.utils import swift as swiftutils

_authurl = 'http://192.168.24.1:5000/v3/'
_auth_version = '3'
_user = 'admin'
# (sudo hiera -c /etc/puppet/hiera.yaml keystone::admin_password)
_key = '6aMpWobr5ySX47vwJefUgMGAA'
_os_options = {
    'user_domain_name': 'Default',
    'project_domain_name': 'Default',
    'project_name': 'admin'
}

conn = Connection(
    authurl=_authurl,
    user=_user,
    key=_key,
    os_options=_os_options,
    auth_version=_auth_version
)

with open('/tmp/foo') as file_content:
    swiftutils.put_object_string(conn, 'overcloud', 'foo', file_content)