diff --git a/docs/configuration.asciidoc b/docs/configuration.asciidoc index 9ac886ab2..7e837f4ba 100644 --- a/docs/configuration.asciidoc +++ b/docs/configuration.asciidoc @@ -181,6 +181,11 @@ Defaults::: Default::: If all of the hosts/host passed to the client via configuration use the same protocol then this defaults to that protocol, otherwise it defaults to `"http"`. +`sniffedNodesFilterPath`[[config-sniffed-filter-path]]:: `String` -- Defines the https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#common-options-response-filtering:`filter_path` used when fetching the node list from Elasticsearch. + +Default::: `'nodes.*.http.publish_address,nodes.*.name,nodes.*.hostname,nodes.*.host,nodes.*.version'` + + `ssl`[[config-ssl]]:: `Object` -- An object defining HTTPS/SSL configuration to use for all nodes. The properties of this mimic the options accepted by http://nodejs.org/docs/latest/api/tls.html#tls_tls_connect_port_host_options_callback[`tls.connect()`] with the exception of `rejectUnauthorized`, which defaults to `false` allowing self-signed certificates to work out-of-the-box. + Additional information available in <>. diff --git a/src/lib/transport.js b/src/lib/transport.js index b030e2e71..474ca2e82 100644 --- a/src/lib/transport.js +++ b/src/lib/transport.js @@ -73,6 +73,18 @@ function Transport(config) { self.sniffedNodesProtocol = findCommonProtocol(self.connectionPool.getAllHosts()) || null; } + if (config.hasOwnProperty('sniffedNodesFilterPath')) { + self.sniffedNodesFilterPath = config.sniffedNodesFilterPath; + } else { + self.sniffedNodesFilterPath = [ + 'nodes.*.http.publish_address', + 'nodes.*.name', + 'nodes.*.hostname', + 'nodes.*.host', + 'nodes.*.version', + ].join(','); + } + if (config.sniffOnStart) { self.sniff(); } @@ -396,21 +408,14 @@ Transport.prototype.sniff = function (cb) { var nodesToHostCallback = this.nodesToHostCallback; var log = this.log; var sniffedNodesProtocol = this.sniffedNodesProtocol; + var sniffedNodesFilterPath = this.sniffedNodesFilterPath; // make cb a function if it isn't cb = typeof cb === 'function' ? cb : _.noop; this.request({ path: this.sniffEndpoint, - query: { - filter_path: [ - 'nodes.*.http.publish_address', - 'nodes.*.name', - 'nodes.*.hostname', - 'nodes.*.host', - 'nodes.*.version', - ].join(','), - }, + query: { filter_path: sniffedNodesFilterPath }, method: 'GET' }, function (err, resp, status) { if (!err && resp && resp.nodes) {