ISSUE-861: add elasticsearch username & password (#894)

* ISSUE-861: add elasticsearch username & password

* ISSUE-861:  python elasticsearch sink add username & password

* ISSUE-861: bugfix

* format code

* format code
This commit is contained in:
rong fengliang 2021-10-24 01:03:24 +08:00 committed by GitHub
parent e2782168e0
commit 8e06fa25b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 7 deletions

View File

@ -26,6 +26,10 @@ public class ElasticSearchConfiguration {
@NotEmpty @NotEmpty
private Integer port; private Integer port;
private String username;
private String password;
public String getHost() { public String getHost() {
return host; return host;
} }
@ -42,11 +46,29 @@ public class ElasticSearchConfiguration {
this.port = port; this.port = port;
} }
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override @Override
public String toString() { public String toString() {
return "ElasticSearchConfiguration {" + return "ElasticSearchConfiguration{" +
", host=" + host + "host='" + host + '\'' +
", port=" + port + ", port=" + port +
"}"; ", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
} }
} }

View File

@ -17,6 +17,12 @@
package org.openmetadata.catalog.resources.search; package org.openmetadata.catalog.resources.search;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.suggest.Suggest; import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.SuggestBuilder; import org.elasticsearch.search.suggest.SuggestBuilder;
@ -66,9 +72,16 @@ public class SearchResource {
private static final Logger LOG = LoggerFactory.getLogger(SearchResource.class); private static final Logger LOG = LoggerFactory.getLogger(SearchResource.class);
public SearchResource(ElasticSearchConfiguration esConfig) { public SearchResource(ElasticSearchConfiguration esConfig) {
this.client = new RestHighLevelClient( RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(esConfig.getHost(), esConfig.getPort(), "http"));
RestClient.builder(new HttpHost(esConfig.getHost(), esConfig.getPort(), "http")) if(StringUtils.isNotEmpty(esConfig.getUsername())){
); CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esConfig.getUsername(), esConfig.getPassword()));
restClientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder -> {
httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
return httpAsyncClientBuilder;
});
}
this.client = new RestHighLevelClient(restClientBuilder);
} }
@GET @GET

View File

@ -52,6 +52,8 @@ logger = logging.getLogger(__name__)
class ElasticSearchConfig(ConfigModel): class ElasticSearchConfig(ConfigModel):
es_host: str es_host: str
es_port: int = 9200 es_port: int = 9200
es_username: str
es_password: str
index_tables: Optional[bool] = True index_tables: Optional[bool] = True
index_topics: Optional[bool] = True index_topics: Optional[bool] = True
index_dashboards: Optional[bool] = True index_dashboards: Optional[bool] = True
@ -88,10 +90,14 @@ class ElasticsearchSink(Sink):
self.status = SinkStatus() self.status = SinkStatus()
self.rest = OpenMetadataAPIClient(self.metadata_config) self.rest = OpenMetadataAPIClient(self.metadata_config)
self.elasticsearch_doc_type = "_doc" self.elasticsearch_doc_type = "_doc"
http_auth = None
if self.config.es_username:
http_auth = (self.config.es_username, self.config.es_password)
self.elasticsearch_client = Elasticsearch( self.elasticsearch_client = Elasticsearch(
[ [
{"host": self.config.es_host, "port": self.config.es_port}, {"host": self.config.es_host, "port": self.config.es_port},
] ],
http_auth=http_auth,
) )
if self.config.index_tables: if self.config.index_tables:
self._check_or_create_index( self._check_or_create_index(