2017-05-09 5 views
0

J'ai essayé d'utiliser la bibliothèque elasticsearch de python pour me connecter à ma machine hôte ElasticSearch. Ainsi, le code ressemble à:L'instanciation d'un client Elasticsearch échoue uniquement lors de l'utilisation de python3

client = Elasticsearch(
     ["https://my-machine.io:9200"], 
     http_auth=("user", "password") 
    ) 

Maintenant, le problème est que cette instruction ne fonctionne que lorsque j'utilise l'interpréteur Python 2.7, alors qu'il échoue avec python 3.6, générant l'erreur suivante:

File "/usr/local/lib/python3.6/site-packages/elasticsearch/client/__init__.py", line 171, in __init__ 
    self.transport = transport_class(_normalize_hosts(hosts), **kwargs) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 108, in __init__ 
    self.set_connections(hosts) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 163, in set_connections 
    connections = list(zip(connections, hosts)) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 160, in _create_connection 
    return self.connection_class(**kwargs) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/connection/http_urllib3.py", line 78, in __init__ 
    raise ImproperlyConfigured("Root certificates are missing for certificate " 
elasticsearch.exceptions.ImproperlyConfigured: Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically. 

versions Python:

$ python2 --version 
Python 2.7.13 
$ python3 --version 
Python 3.6.1 

Dans les deux cas j'utilise le paquet "ElasticSearch", version 5.3.0

Je n'ai pas été en mesure de trouver une pièce de documentation qui suggérerait un comportement différent en fonction de la version de python utilisée. Quelqu'un pourrait-il expliquer pourquoi cela se passe-t-il?

+0

Quelle version du module elasticsearch utilisez-vous dans chaque cas? –

+0

Cela pourrait aider: https://access.redhat.com/articles/2039753 – Val

+0

Avec quelle version de python 2 cela fonctionnait-il? (parce que le mécanisme par défaut d'urllib est maintenant de vérifier les certificats par défaut). Lors de l'instanciation de votre client, avez-vous essayé d'utiliser l'argument 'verify_certs = False'? – Adonis

Répondre

3

Il semble que le problème réside dans votre configuration SSL, assurez-vous d'avoir installé certifi qui fournira les certificats racine nécessaires.