-
Bug
-
Resolution: Done
-
Critical
-
None
Description:
This is an issue found when deploy quay using Operator, using AWS S3 as backend storage registry, the deployment was failed, the error message is "util.config.validators.ConfigValidationException: Invalid storage configuration: s3: 'dict' object has no attribute 'iteritems', refer to logs for details.
Image:
quay.io/projectquay/quay:solo
quay.io/projectquay/clair-jwt:solo
Expected Results:
Quay deployment should complete successfully.
Actual Results:
Quay deployment was failed.
Logs:
2020-07-14 02:37:39,983 [53] [INFO] [gunicorn.access] - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/redis HTTP/1.0" 200 17 "-" "Go-http-client/1.1"
gunicorn-config stdout | 2020-07-14 02:37:39,983 [53] [INFO] [gunicorn.access] - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/redis HTTP/1.0" 200 17 "-" "Go-http-client/1.1"
2020-07-14 02:37:39,994 [53] [ERROR] [util.config.validator] Validation exception
Traceback (most recent call last):
File "/quay-registry/util/config/validators/validate_storage.py", line 37, in validate
driver.validate(client)
File "/quay-registry/storage/basestorage.py", line 54, in validate
self.put_content("_verify", b"testing 123")
File "/quay-registry/storage/cloud.py", line 154, in put_content
key.set_contents_from_string(content, **self._upload_params)
File "/quay-registry/src/boto/boto/s3/key.py", line 1442, in set_contents_from_string
encrypt_key=encrypt_key)
File "/quay-registry/src/boto/boto/s3/key.py", line 1309, in set_contents_from_file
chunked_transfer=chunked_transfer, size=size)
File "/quay-registry/src/boto/boto/s3/key.py", line 762, in send_file
chunked_transfer=chunked_transfer, size=size)
File "/quay-registry/src/boto/boto/s3/key.py", line 963, in _send_file_internal
query_args=query_args
File "/quay-registry/src/boto/boto/s3/connection.py", line 671, in make_request
retry_handler=retry_handler
File "/quay-registry/src/boto/boto/connection.py", line 1071, in make_request
retry_handler=retry_handler)
File "/quay-registry/src/boto/boto/connection.py", line 927, in _mexe
request.authorize(connection=self)
File "/quay-registry/src/boto/boto/connection.py", line 377, in authorize
connection._auth_handler.add_auth(self, **kwargs)
File "/quay-registry/src/boto/boto/auth.py", line 760, in add_auth
**kwargs)
File "/quay-registry/src/boto/boto/auth.py", line 577, in add_auth
canonical_request = self.canonical_request(req)
File "/quay-registry/src/boto/boto/auth.py", line 453, in canonical_request
cr.append(self.canonical_headers(headers_to_sign) + '\n')
File "/quay-registry/src/boto/boto/auth.py", line 416, in canonical_headers
for name, value in sorted(canonical.iteritems()):
AttributeError: 'dict' object has no attribute 'iteritems'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/quay-registry/util/config/validator.py", line 85, in validate_service_for_config
VALIDATORS[service](validator_context)
File "/quay-registry/util/config/validators/validate_storage.py", line 44, in validate
"Invalid storage configuration: %s: %s" % (name, msg)
util.config.validators.ConfigValidationException: Invalid storage configuration: s3: 'dict' object has no attribute 'iteritems'
gunicorn-config stdout | 2020-07-14 02:37:39,994 [53] [ERROR] [util.config.validator] Validation exception
gunicorn-config stdout | Traceback (most recent call last):
gunicorn-config stdout | File "/quay-registry/util/config/validators/validate_storage.py", line 37, in validate
gunicorn-config stdout | driver.validate(client)
gunicorn-config stdout | File "/quay-registry/storage/basestorage.py", line 54, in validate
gunicorn-config stdout | self.put_content("_verify", b"testing 123")
gunicorn-config stdout | File "/quay-registry/storage/cloud.py", line 154, in put_content
gunicorn-config stdout | key.set_contents_from_string(content, **self._upload_params)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/s3/key.py", line 1442, in set_contents_from_string
gunicorn-config stdout | encrypt_key=encrypt_key)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/s3/key.py", line 1309, in set_contents_from_file
gunicorn-config stdout | chunked_transfer=chunked_transfer, size=size)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/s3/key.py", line 762, in send_file
gunicorn-config stdout | chunked_transfer=chunked_transfer, size=size)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/s3/key.py", line 963, in _send_file_internal
gunicorn-config stdout | query_args=query_args
gunicorn-config stdout | File "/quay-registry/src/boto/boto/s3/connection.py", line 671, in make_request
gunicorn-config stdout | retry_handler=retry_handler
gunicorn-config stdout | File "/quay-registry/src/boto/boto/connection.py", line 1071, in make_request
gunicorn-config stdout | retry_handler=retry_handler)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/connection.py", line 927, in _mexe
gunicorn-config stdout | request.authorize(connection=self)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/connection.py", line 377, in authorize
gunicorn-config stdout | connection._auth_handler.add_auth(self, **kwargs)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/auth.py", line 760, in add_auth
gunicorn-config stdout | **kwargs)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/auth.py", line 577, in add_auth
gunicorn-config stdout | canonical_request = self.canonical_request(req)
gunicorn-config stdout | File "/quay-registry/src/boto/boto/auth.py", line 453, in canonical_request
gunicorn-config stdout | cr.append(self.canonical_headers(headers_to_sign) + '\n')
gunicorn-config stdout | File "/quay-registry/src/boto/boto/auth.py", line 416, in canonical_headers
gunicorn-config stdout | for name, value in sorted(canonical.iteritems()):
gunicorn-config stdout | AttributeError: 'dict' object has no attribute 'iteritems'
gunicorn-config stdout | During handling of the above exception, another exception occurred:
gunicorn-config stdout | Traceback (most recent call last):
gunicorn-config stdout | File "/quay-registry/util/config/validator.py", line 85, in validate_service_for_config
gunicorn-config stdout | VALIDATORS[service](validator_context)
gunicorn-config stdout | File "/quay-registry/util/config/validators/validate_storage.py", line 44, in validate
gunicorn-config stdout | "Invalid storage configuration: %s: %s" % (name, msg)
gunicorn-config stdout | util.config.validators.ConfigValidationException: Invalid storage configuration: s3: 'dict' object has no attribute 'iteritems'
10.131.0.18 () - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/registry-storage HTTP/1.1" 200 109 "-" "Go-http-client/1.1" (0.012 2518 0.012)
nginx stdout | 10.131.0.18 () - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/registry-storage HTTP/1.1" 200 109 "-" "Go-http-client/1.1" (0.012 2518 0.012)
2020-07-14 02:37:39,997 [53] [INFO] [gunicorn.access] - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/registry-storage HTTP/1.0" 200 109 "-" "Go-http-client/1.1"
gunicorn-config stdout | 2020-07-14 02:37:39,997 [53] [INFO] [gunicorn.access] - quayconfig [14/Jul/2020:02:37:39 +0000] "POST /api/v1/superuser/config/validate/registry-storage HTTP/1.0" 200 109 "-" "Go-http-client/1.1"
- is related to
-
PROJQUAY-835 Migrate from boto2 to boto3
- Closed