diff --git a/elastichq/config/settings.py b/elastichq/config/settings.py index be7004ea..dee5f41f 100644 --- a/elastichq/config/settings.py +++ b/elastichq/config/settings.py @@ -62,7 +62,7 @@ class TestSettings(BaseSettings): # static HQ_SITE_URL = 'http://elastichq.org' HQ_GH_URL = 'https://github.com/ElasticHQ/elasticsearch-HQ' - API_VERSION = 'v3.5.7' + API_VERSION = 'v3.5.12' ES_TEST_INDEX_NAME = 'cars' @@ -105,7 +105,7 @@ class ProdSettings(BaseSettings): # static HQ_SITE_URL = 'http://elastichq.org' HQ_GH_URL = 'https://github.com/ElasticHQ/elasticsearch-HQ' - API_VERSION = '3.5.7' + API_VERSION = '3.5.12' SERVER_NAME = None # cluster settings: specific settings for each cluster and how HQ should handle it. diff --git a/elastichq/service/ConnectionService.py b/elastichq/service/ConnectionService.py index 33d4ccf8..492eee3e 100644 --- a/elastichq/service/ConnectionService.py +++ b/elastichq/service/ConnectionService.py @@ -6,10 +6,11 @@ import requests from requests.exceptions import ConnectionError +from elastichq.common.utils import string_to_bool from elastichq.model import ClusterModel from elastichq.service.persistence import ClusterDBService from ..globals import CONNECTIONS, LOG, REQUEST_TIMEOUT -from ..vendor.elasticsearch import Elasticsearch +from ..vendor.elasticsearch import Elasticsearch, RequestsHttpConnection from ..vendor.elasticsearch.connections import ConnectionNotFoundException @@ -54,6 +55,8 @@ def create_connection(self, ip, port, scheme='http', username=None, password=Non :return: """ try: + verify_certs = string_to_bool(verify_certs) + enable_ssl = string_to_bool(enable_ssl) LOG.info('Verify: ' + str(verify_certs)) LOG.info('Cert File: ' + str(ca_certs)) @@ -76,7 +79,7 @@ def create_connection(self, ip, port, scheme='http', username=None, password=Non if verify_certs is False: LOG.info("Verify Certs is False") response = requests.get(scheme + "://" + ip + ":" + port, auth=(username, password), - timeout=REQUEST_TIMEOUT, verify=verify_certs, + timeout=REQUEST_TIMEOUT, verify=False, cert=client_cert_credentials) else: LOG.info("Verify Certs is True") @@ -93,7 +96,7 @@ def create_connection(self, ip, port, scheme='http', username=None, password=Non if verify_certs is False: LOG.info("Verify Certs is False") response = requests.get(scheme + "://" + ip + ":" + port, timeout=REQUEST_TIMEOUT, - verify=verify_certs, cert=client_cert_credentials) + verify=False, cert=client_cert_credentials) else: LOG.info("Verify Certs is True") response = requests.get(scheme + "://" + ip + ":" + port, timeout=REQUEST_TIMEOUT, @@ -103,7 +106,7 @@ def create_connection(self, ip, port, scheme='http', username=None, password=Non response = requests.get(scheme + "://" + ip + ":" + port, timeout=REQUEST_TIMEOUT) if response.status_code == 401: - message = "Unable to create connection! Server returned 401 - UNAUTHORIZED: " + scheme + "://" + ip +\ + message = "Unable to create connection! Server returned 401 - UNAUTHORIZED: " + scheme + "://" + ip + \ ":" + port raise ConnectionNotAuthorized(message=message) @@ -112,20 +115,38 @@ def create_connection(self, ip, port, scheme='http', username=None, password=Non # SAVE to Connection Pools if is_basic_auth is True: if enable_ssl: - conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, - use_ssl=True, verify_certs=verify_certs, ca_certs=ca_certs, - version=content.get('version').get('number'), http_auth=(username, password), - client_cert=client_cert, client_key=client_key) + if verify_certs is False: + LOG.info("Verify Certs is False") + conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, + use_ssl=True, verify_certs=False, + version=content.get('version').get('number'), + http_auth=(username, password), connection_class=RequestsHttpConnection) + else: + LOG.info("Verify Certs is True") + conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, + use_ssl=True, verify_certs=ca_certs, ca_certs=ca_certs, + version=content.get('version').get('number'), + http_auth=(username, password), + client_cert=client_cert, client_key=client_key) + else: conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, version=content.get('version').get('number'), http_auth=(username, password)) else: if enable_ssl: - conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, - use_ssl=True, verify_certs=verify_certs, ca_certs=ca_certs, - version=content.get('version').get('number'), - client_cert=client_cert, client_key=client_key) + if verify_certs is False: + LOG.info("Verify Certs is False") + conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, + use_ssl=True, verify_certs=False, + version=content.get('version').get('number'), + connection_class=RequestsHttpConnection) + else: + LOG.info("Verify Certs is False") + conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, + use_ssl=True, verify_certs=ca_certs, ca_certs=ca_certs, + version=content.get('version').get('number'), + client_cert=client_cert, client_key=client_key) else: conn = Elasticsearch(hosts=[scheme + "://" + ip + ":" + port], maxsize=5, version=content.get('version').get('number')) @@ -178,7 +199,7 @@ def get_connection(self, cluster_name, create_if_missing=True): Interface for cluster connection pool object. If a connection does not exist, it will attempt to create it, using what is stored in the database. If it cannot find the connection or cannot create one from the database, it will throw a ConnectionNotFoundException - :param cluster_name: + :param cluster_name: :param create_if_missing: Will create the connection in the connection pool AND the persistence layer if it does not exist. :return: diff --git a/example/docker-compose-local-dev.yml b/example/docker-compose-local-dev.yml index 505764ae..0fb4f8e6 100644 --- a/example/docker-compose-local-dev.yml +++ b/example/docker-compose-local-dev.yml @@ -2,6 +2,7 @@ # Use this file to build from local source. Note you have to 'docker system prune -a' on code changes or 'docker-compose build' # Sample docker-compose file that will allow for connecting ES and HQ between separate containers # Note that the container_name (elasticsearch) is used as a default connection url in the HQ settings. +# For pushing from local: https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html ################################################################################################################ version: '3' @@ -10,13 +11,14 @@ services: build: context: ../ dockerfile: Dockerfile + image: elasticsearch-hq:develop container_name: elastichq environment: - HQ_DEFAULT_URL=http://elasticsearch:9200 - HQ_DEBUG=True - # - HQ_ENABLE_SSL=True - # - HQ_VERIFY_CERTS=False - # - HQ_CA_CERTS=/usr/local/share/ca-certificates/MYCA.crt + - HQ_ENABLE_SSL=True + - HQ_VERIFY_CERTS=False + - HQ_CA_CERTS=/usr/local/share/ca-certificates/MYCA.crt ports: - 5000:5000 networks: