deis / controller

Deis Workflow Controller (API)
https://deis.com
MIT License
41 stars 53 forks source link

Exception thrown during POST /v2/apps/ #1286

Closed hankjacobs closed 7 years ago

hankjacobs commented 7 years ago

Hello!

An exception is being thrown during a POST to /v2/apps/. The stacktrace is at the end of this issue. I've tried to reproduce the issue locally using the ca.crt file found at '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt' but cannot (see snippet used below). Disabling tls verification resolves the issue but is not a valid solution in my opinion. Insight / assistance / suggestions would be appreciated.

>>> import requests
>>> session = requests.Session()
>>> session.verify = 'ca.crt'
>>> r = session.get('https://[K8S API URL]:[K8S API PORT]')
ERROR:root:Uncaught Exception
Traceback (most recent call last):
  File "/app/api/models/app.py", line 89, in save
    self.release_set.latest()
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 550, in latest
    return self._earliest_or_latest(field_name=field_name, direction="-")
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 544, in _earliest_or_latest
    return obj.get()
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 385, in get
    self.model._meta.object_name
api.models.release.DoesNotExist: Release matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/rest_framework/views.py", line 480, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/rest_framework/mixins.py", line 21, in create
    self.perform_create(serializer)
  File "/app/api/viewsets.py", line 20, in perform_create
    obj = serializer.save(owner=self.request.user)
  File "/usr/local/lib/python3.5/dist-packages/rest_framework/serializers.py", line 214, in save
    self.instance = self.create(validated_data)
  File "/usr/local/lib/python3.5/dist-packages/rest_framework/serializers.py", line 906, in create
    instance = ModelClass.objects.create(**validated_data)
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 399, in create
    obj.save(force_insert=True, using=self.db)
  File "/app/api/models/app.py", line 92, in save
    if self._scheduler.ns.get(self.id).status_code == 200:
  File "/app/scheduler/resources/namespace.py", line 22, in get
    response = self.http_get(url, params=self.query_params(**kwargs))
  File "/app/scheduler/__init__.py", line 171, in http_get
    response = self.session.get(url, params=params, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connectionpool.py", line 844, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/connection.py", line 333, in connect
    cert = self.sock.getpeercert()
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 343, in getpeercert
    'subjectAltName': get_subj_alt_name(x509)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 219, in get_subj_alt_name
    for name in ext.get_values_for_type(x509.DNSName)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 219, in <listcomp>
    for name in ext.get_values_for_type(x509.DNSName)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 175, in _dnsname_to_stdlib
    name = idna_encode(name)
  File "/usr/local/lib/python3.5/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 173, in idna_encode
    return idna.encode(name)
  File "/usr/local/lib/python3.5/dist-packages/idna/core.py", line 350, in encode
    raise IDNAError('Empty domain')
idna.core.IDNAError: Empty domain
10.68.39.200 "POST /v2/apps/ HTTP/1.1" 500 25 "Deis Client v2.13.0"
bacongobbler commented 7 years ago

This appears at first glance to be a duplicate of https://github.com/deis/workflow/issues/793. Would you mind verifying if it is? Thanks! :)

hankjacobs commented 7 years ago

yup, exactly that. Thank you!