OpenStack's Nova API encounters a UnicodeDecodeError when attempting to handle project names containing special characters, leading to a failure in executing operations like terraform destroy

Bug #2065916 reported by Shubham Yadav
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
New
Undecided
Unassigned

Bug Description

When attempting to execute terraform destroy in the "Para Disésys" project within OpenStack, an error occurs due to special characters in the project name. Specifically, the presence of the accented character "é" in the project name leads to a UnicodeDecodeError during the deletion process, resulting in a 500 error response instead of the expected 404 response. This issue prevents Terraform from successfully destroying resources that have already been manually deleted from the OpenStack dashboard.

The specific error returned by OpenStack is:
{"computeFault": {"code": 500, "message": "The server has either erred or is incapable of performing the requested operation."}}

Upon investigating the Nova API logs, we observed the following traceback:
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack response = req.get_response(self._app)
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 826: invalid continuation byte

The error logs:
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack response = req.get_response(self._app)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/request.py", line 1313, in send
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack status, headers, app_iter = self.call_application(
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/request.py", line 1278, in call_application
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack app_iter = application(self.environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 129, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack resp = self.call_func(req, *args, **kw)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 193, in call_func
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return self.func(req, *args, **kwargs)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/keystonemiddleware/audit/__init__.py", line 159, in _
_call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack response = req.get_response(self._application)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/request.py", line 1313, in send
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack status, headers, app_iter = self.call_application(
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/request.py", line 1278, in call_application
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack app_iter = application(self.environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 143, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return resp(environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 143, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return resp(environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/routes/middleware.py", line 153, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack response = self.app(environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 143, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return resp(environ, start_response)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 129, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack resp = self.call_func(req, *args, **kw)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/dec.py", line 193, in call_func
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return self.func(req, *args, **kwargs)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/nova/api/openstack/wsgi.py", line 486, in __call__
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return self._process_stack(request, action, action_args,
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/nova/api/openstack/wsgi.py", line 541, in _process_st
ack
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack LOG.debug(f'Request method failure captured:\n'
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack File "/var/lib/openstack/lib/python3.8/site-packages/webob/request.py", line 1179, in as_text
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack return bytes.decode(self.charset)
nova-api-osapi-76d4466df7-cqqc2 nova-osapi 2024-05-16 13:46:58.408 1 ERROR nova.api.openstack UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 826: invalid continuation byte

This error occurs because the project name contains a special character (é), causing the UTF-8 decoding process to fail. However, the root issue is that Terraform attempts to delete a VM that no longer exists, and the API does not handle this scenario gracefully.

Steps to Reproduce:
source keystonerc
export OS_PROJECT_NAME="Para Disésys"
openstack token issue
# replace with your token
export OS_TOKEN=""
curl -X DELETE https://nova.tytesnet.net/v2.1/6bbe727a7d524579a367d46af74087/servers/3842729c-ef45-49c9-ad81-88e8a91065989 -H "X-Auth-Token: $OS_TOKEN"

Expected Behavior:
Executing terraform destroy should return a 404 error when attempting to delete a resource that has already been manually deleted from the OpenStack dashboard, regardless of any special characters in the project name.

Actual Behavior:
The presence of special characters in the project name, such as "é" in "Para Disésys" leads to a UnicodeDecodeError during the deletion process, resulting in a 500 error response instead of the expected 404 response.

description: updated
description: updated
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.