Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions ConfigurationSystem/Client/Utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,62 @@ def getElasticDBParameters(fullname):
ssl = False if result['Value'].lower() in ('false', 'no', 'n') else True
parameters['SSL'] = ssl

# Elasticsearch use certs
result = gConfig.getOption(cs_path + '/CRT')
if not result['OK']:
# No CRT option found, try at the common place
result = gConfig.getOption('/Systems/NoSQLDatabases/CRT')
if not result['OK']:
gLogger.warn("Failed to get the configuration parameter: CRT. Using False")
certs = False
else:
certs = result['Value']
else:
certs = result['Value']
parameters['CRT'] = certs

# Elasticsearch ca_certs
result = gConfig.getOption(cs_path + '/ca_certs')
if not result['OK']:
# No CA certificate found, try at the common place
result = gConfig.getOption('/Systems/NoSQLDatabases/ca_certs')
if not result['OK']:
gLogger.warn("Failed to get the configuration parameter: ca_certs. Using None")
ca_certs = None
else:
ca_certs = result['Value']
else:
ca_certs = result['Value']
parameters['ca_certs'] = ca_certs

# Elasticsearch client_key
result = gConfig.getOption(cs_path + '/client_key')
if not result['OK']:
# No client private key found, try at the common place
result = gConfig.getOption('/Systems/NoSQLDatabases/client_key')
if not result['OK']:
gLogger.warn("Failed to get the configuration parameter: client_key. Using None")
client_key = None
else:
client_key = result['Value']
else:
client_key = result['Value']
parameters['client_key'] = client_key

# Elasticsearch client_cert
result = gConfig.getOption(cs_path + '/client_cert')
if not result['OK']:
# No cient certificate found, try at the common place
result = gConfig.getOption('/Systems/NoSQLDatabases/client_cert')
if not result['OK']:
gLogger.warn("Failed to get the configuration parameter: client_cert. Using None")
client_cert = None
else:
client_cert = result['Value']
else:
client_cert = result['Value']
parameters['client_cert'] = client_cert

return S_OK(parameters)


Expand Down
11 changes: 10 additions & 1 deletion Core/Base/ElasticDB.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,22 @@ def __init__(self, dbname, fullName, indexPrefix=''):
self.__user = dbParameters.get('User', '')
self.__dbPassword = dbParameters.get('Password', '')
self.__useSSL = dbParameters.get('SSL', True)
self.__useCRT = dbParameters.get('CRT', True)
self.__ca_certs = dbParameters.get('ca_certs', None)
self.__client_key = dbParameters.get('client_key', None)
self.__client_cert = dbParameters.get('client_cert', None)

super(ElasticDB, self).__init__(self._dbHost,
self._dbPort,
self.__user,
self.__dbPassword,
indexPrefix,
useSSL=self.__useSSL)
useSSL=self.__useSSL,
useCRT=self.__useCRT,
ca_certs=self.__ca_certs,
client_key=self.__client_key,
client_cert=self.__client_cert)

if not self._connected:
raise RuntimeError('Can not connect to ES cluster %s, exiting...' % self.clusterName)

Expand Down
15 changes: 14 additions & 1 deletion Core/Utilities/ElasticSearchDB.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ class ElasticSearchDB(object):
RESULT_SIZE = 10000

########################################################################
def __init__(self, host, port, user=None, password=None, indexPrefix='', useSSL=True):
def __init__(self, host, port, user=None, password=None, indexPrefix='', useSSL=True,
useCRT=False, ca_certs=None, client_key=None, client_cert=None):
""" c'tor

:param self: self reference
Expand All @@ -68,6 +69,10 @@ def __init__(self, host, port, user=None, password=None, indexPrefix='', useSSL=
:param str password: if the db is password protected we need to provide a password
:param str indexPrefix: it is the indexPrefix used to get all indexes
:param bool useSSL: We can disable using secure connection. By default we use secure connection.
:param bool useCRT: Use certificates.
:param str ca_certs: Server certificate.
:param str client_key: Client key.
:param str client_cert: Client certificate.
"""

self.__indexPrefix = indexPrefix
Expand Down Expand Up @@ -105,6 +110,14 @@ def __init__(self, host, port, user=None, password=None, indexPrefix='', useSSL=
use_ssl=True,
verify_certs=True,
ca_certs=casFile)
elif useCRT:
self.client = Elasticsearch(self.__url,
timeout=self.__timeout,
use_ssl=True,
verify_certs=True,
ca_certs=ca_certs,
client_cert=client_cert,
client_key=client_key)
else:
self.client = Elasticsearch(self.__url, timeout=self.__timeout)

Expand Down