lyft / metadataproxy

A proxy for AWS's metadata service that gives out scoped IAM credentials from STS
Other
456 stars 69 forks source link

Non-networked pods cause error #48

Closed carolinebeauchamp closed 7 years ago

carolinebeauchamp commented 7 years ago

Running metadataproxy on kubernetes, and it was failing with the following error:

[2017-03-13 14:54:23 +0000] [10] [ERROR] Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 52, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/ggevent.py", line 159, in handle_request
    super(GeventWorker, self).handle_request(*args)
  File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 105, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/srv/metadataproxy/metadataproxy/routes/proxy.py", line 44, in iam_role_name
    role_name_from_ip = roles.get_role_name_from_ip(request.remote_addr)
  File "/srv/metadataproxy/metadataproxy/roles.py", line 59, in timed
    result = method(*args, **kw)
  File "/srv/metadataproxy/metadataproxy/roles.py", line 174, in get_role_name_from_ip
    container = find_container(ip)
  File "/srv/metadataproxy/metadataproxy/roles.py", line 59, in timed
    result = method(*args, **kw)
  File "/srv/metadataproxy/metadataproxy/roles.py", line 134, in find_container
    if len(_networks) > 0:
TypeError: object of type 'NoneType' has no len()

Some of our containers have no networks, so len(_networks) isn't an array, is just None. Adding a check for _networks being not None fixed it.

ryan-lane commented 7 years ago

Hey @carolinebeauchamp, thanks for the bug report! I think https://github.com/lyft/metadataproxy/pull/49 should fix your issue. Can you verify?

carolinebeauchamp commented 7 years ago

Yup! looks lovely, thanks 👍

ryan-lane commented 7 years ago

Released as 1.3.1. Should show up in pypi soon. I still need to fix the push to dockerhub, so it won't show up there yet.