Skip to content
Snippets Groups Projects
Commit da89943e authored by OZGCloud's avatar OZGCloud
Browse files

Merge branch 'OZG-4453-SearchIndexOperator' of...

Merge branch 'OZG-4453-SearchIndexOperator' of git.ozg-sh.de:ozgcloud-devops/operator into OZG-4453-SearchIndexOperator
parents daa39778 065ca280
No related branches found
No related tags found
No related merge requests found
...@@ -27,14 +27,14 @@ public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearch ...@@ -27,14 +27,14 @@ public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearch
public UpdateControl<OzgCloudElasticsearchCustomResource> reconcile(OzgCloudElasticsearchCustomResource resource, public UpdateControl<OzgCloudElasticsearchCustomResource> reconcile(OzgCloudElasticsearchCustomResource resource,
Context<OzgCloudElasticsearchCustomResource> context) { Context<OzgCloudElasticsearchCustomResource> context) {
try { try {
LOG.info("{0}: Reconcile user", resource.getCRDName()); LOG.info("{}: Reconcile user", resource.getCRDName());
var namespace = resource.getMetadata().getNamespace(); var namespace = resource.getMetadata().getNamespace();
var secret = service.getOrCreateCredentialSecret(resource, context); var secret = service.getOrCreateCredentialSecret(resource, context);
service.createIndexIfMissing(namespace); service.createIndexIfMissing(namespace);
service.createSecurityRoleIfMissing(namespace); service.createSecurityRoleIfMissing(namespace);
service.createSecurityUserIfMissing(namespace, getPassword(secret)); service.createSecurityUserIfMissing(namespace, getPassword(secret));
service.createCertificateIfMissing(namespace); service.createCertificateIfMissing(namespace);
LOG.info("{0}: Reconcile user successful.", resource.getCRDName()); LOG.info("{}: Reconcile user successful.", resource.getCRDName());
return OzgCloudElasticsearchUpdateControlBuilder.fromResource(resource).withStatus(CustomResourceStatus.OK).build(); return OzgCloudElasticsearchUpdateControlBuilder.fromResource(resource).withStatus(CustomResourceStatus.OK).build();
} catch (Exception exception) { } catch (Exception exception) {
LOG.warn(resource.getCRDName() + ": Reconcile user failed.", exception); LOG.warn(resource.getCRDName() + ": Reconcile user failed.", exception);
......
...@@ -29,14 +29,14 @@ public class OzgCloudElasticsearchService { ...@@ -29,14 +29,14 @@ public class OzgCloudElasticsearchService {
public Secret getOrCreateCredentialSecret(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) { public Secret getOrCreateCredentialSecret(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) {
try { try {
LOG.debug("{0}: Get or create secret.", resource.getCRDName()); LOG.debug("{}: Get or create secret.", resource.getCRDName());
var namespace = resource.getMetadata().getNamespace(); var namespace = resource.getMetadata().getNamespace();
var secretResource = getCredentialsSecretResource(namespace); var secretResource = getCredentialsSecretResource(namespace);
if (Objects.isNull(secretResource.get())) { if (Objects.isNull(secretResource.get())) {
LOG.info("{0}: Secret not exists, create one ...", resource.getCRDName()); LOG.info("{}: Secret not exists, create one ...", resource.getCRDName());
createCredentialSecret(secretResource, namespace); createCredentialSecret(secretResource, namespace);
LOG.info("{0}: Secret creation successful.", resource.getCRDName()); LOG.info("{}: Secret creation successful.", resource.getCRDName());
} }
return secretResource.get(); return secretResource.get();
} catch (Exception e) { } catch (Exception e) {
...@@ -54,14 +54,14 @@ public class OzgCloudElasticsearchService { ...@@ -54,14 +54,14 @@ public class OzgCloudElasticsearchService {
} }
public void createIndexIfMissing(String name) throws Exception { public void createIndexIfMissing(String name) throws Exception {
LOG.debug("{0}: Check elasticsearch index...", name); LOG.debug("{}: Check elasticsearch index...", name);
if (!remoteService.existsIndex(name)) { if (!remoteService.existsIndex(name)) {
remoteService.createIndex(name); remoteService.createIndex(name);
} }
} }
public void createSecurityRoleIfMissing(String roleName) throws Exception { public void createSecurityRoleIfMissing(String roleName) throws Exception {
LOG.debug("{0}: Check elasticsearch role...", roleName); LOG.debug("{}: Check elasticsearch role...", roleName);
if (!remoteService.existsSecurityRole(roleName)) { if (!remoteService.existsSecurityRole(roleName)) {
remoteService.createSecurityRole(buildPutRoleRequestData(roleName)); remoteService.createSecurityRole(buildPutRoleRequestData(roleName));
} }
...@@ -76,7 +76,7 @@ public class OzgCloudElasticsearchService { ...@@ -76,7 +76,7 @@ public class OzgCloudElasticsearchService {
} }
public void createSecurityUserIfMissing(String namespace, String password) throws Exception { public void createSecurityUserIfMissing(String namespace, String password) throws Exception {
LOG.debug("{0}: Check elasticsearch user...", namespace); LOG.debug("{}: Check elasticsearch user...", namespace);
if (!remoteService.existsSecurityUser(namespace)) { if (!remoteService.existsSecurityUser(namespace)) {
remoteService.createSecurityUser(buildPutUserRequestData(namespace, password)); remoteService.createSecurityUser(buildPutUserRequestData(namespace, password));
} }
...@@ -87,21 +87,21 @@ public class OzgCloudElasticsearchService { ...@@ -87,21 +87,21 @@ public class OzgCloudElasticsearchService {
} }
public void deleteSecurityUserIfExists(String userName) throws Exception { public void deleteSecurityUserIfExists(String userName) throws Exception {
LOG.debug("{0}: Check delete elasticsearch user...", userName); LOG.debug("{}: Check delete elasticsearch user...", userName);
if (remoteService.existsSecurityUser(userName)) { if (remoteService.existsSecurityUser(userName)) {
remoteService.deleteSecurityUser(userName); remoteService.deleteSecurityUser(userName);
} }
} }
public void deleteSecurityRoleIfExists(String roleName) throws Exception { public void deleteSecurityRoleIfExists(String roleName) throws Exception {
LOG.debug("{0}: Check delete elasticsearch role...", roleName); LOG.debug("{}: Check delete elasticsearch role...", roleName);
if (remoteService.existsSecurityRole(roleName)) { if (remoteService.existsSecurityRole(roleName)) {
remoteService.deleteSecurityRole(roleName); remoteService.deleteSecurityRole(roleName);
} }
} }
public void deleteIndexIfExists(String indexName) throws Exception { public void deleteIndexIfExists(String indexName) throws Exception {
LOG.debug("{0}: Check delete elasticsearch index ...", indexName); LOG.debug("{}: Check delete elasticsearch index ...", indexName);
if (remoteService.existsIndex(indexName)) { if (remoteService.existsIndex(indexName)) {
remoteService.deleteIndex(indexName); remoteService.deleteIndex(indexName);
} }
...@@ -109,11 +109,11 @@ public class OzgCloudElasticsearchService { ...@@ -109,11 +109,11 @@ public class OzgCloudElasticsearchService {
public void createCertificateIfMissing(String namespace) { public void createCertificateIfMissing(String namespace) {
try { try {
LOG.debug("{0}: Create certificate secret if missing...", namespace); LOG.debug("{}: Create certificate secret if missing...", namespace);
var secretResource = kubernetesService.getSecretResource(namespace, properties.getCertificateSecretName()); var secretResource = kubernetesService.getSecretResource(namespace, properties.getCertificateSecretName());
if (Objects.isNull(secretResource.get())) { if (Objects.isNull(secretResource.get())) {
LOG.info("{0}: Create certificate secret", namespace); LOG.info("{}: Create certificate secret", namespace);
createCredentialSecret(namespace, secretResource); createCredentialSecret(namespace, secretResource);
} }
} catch (Exception e) { } catch (Exception e) {
......
...@@ -19,9 +19,9 @@ import co.elastic.clients.transport.rest_client.RestClientTransport; ...@@ -19,9 +19,9 @@ import co.elastic.clients.transport.rest_client.RestClientTransport;
import de.ozgcloud.operator.OzgCloudElasticsearchProperties; import de.ozgcloud.operator.OzgCloudElasticsearchProperties;
import de.ozgcloud.operator.common.kubernetes.KubernetesRemoteService; import de.ozgcloud.operator.common.kubernetes.KubernetesRemoteService;
import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.api.model.Secret;
import lombok.extern.java.Log; import lombok.extern.log4j.Log4j2;
@Log @Log4j2
@Configuration @Configuration
public class ElasticsearchClientConfiguration { public class ElasticsearchClientConfiguration {
...@@ -33,7 +33,7 @@ public class ElasticsearchClientConfiguration { ...@@ -33,7 +33,7 @@ public class ElasticsearchClientConfiguration {
@Bean @Bean
@Scope("singleton") @Scope("singleton")
ElasticsearchClient createElasticsearchClient() { ElasticsearchClient createElasticsearchClient() {
log.info("Create elasticsearch client..."); LOG.info("Create elasticsearch client...");
var credentialsProvider = createCredentialsProvider(elasticSearchProperties.getServer().getSecretDataKey(), getPassword()); var credentialsProvider = createCredentialsProvider(elasticSearchProperties.getServer().getSecretDataKey(), getPassword());
var restClient = buildRestClient(credentialsProvider); var restClient = buildRestClient(credentialsProvider);
var transport = createRestClientTransport(restClient); var transport = createRestClientTransport(restClient);
...@@ -43,7 +43,6 @@ public class ElasticsearchClientConfiguration { ...@@ -43,7 +43,6 @@ public class ElasticsearchClientConfiguration {
private BasicCredentialsProvider createCredentialsProvider(String userName, String password) { private BasicCredentialsProvider createCredentialsProvider(String userName, String password) {
var credentialsProvider = new BasicCredentialsProvider(); var credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password)); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
log.info(String.format("use credentials: username: %s, password: %s", userName, password));
return credentialsProvider; return credentialsProvider;
} }
...@@ -54,8 +53,10 @@ public class ElasticsearchClientConfiguration { ...@@ -54,8 +53,10 @@ public class ElasticsearchClientConfiguration {
} }
private HttpHost createHttpHost() { private HttpHost createHttpHost() {
log.info(String.format("use host: %s with port: %s and scheme: %s", elasticSearchProperties.getServer().getHost(), elasticSearchProperties.getServer().getPort(), elasticSearchProperties.getServer().getScheme())); LOG.info(String.format("ElasticSearch config: host: %s with port: %s and scheme: %s", elasticSearchProperties.getServer().getHost(),
return new HttpHost(elasticSearchProperties.getServer().getHost(), elasticSearchProperties.getServer().getPort(), elasticSearchProperties.getServer().getScheme()); elasticSearchProperties.getServer().getPort(), elasticSearchProperties.getServer().getScheme()));
return new HttpHost(elasticSearchProperties.getServer().getHost(), elasticSearchProperties.getServer().getPort(),
elasticSearchProperties.getServer().getScheme());
} }
private RestClientTransport createRestClientTransport(RestClient restClient) { private RestClientTransport createRestClientTransport(RestClient restClient) {
...@@ -63,16 +64,16 @@ public class ElasticsearchClientConfiguration { ...@@ -63,16 +64,16 @@ public class ElasticsearchClientConfiguration {
} }
String getPassword() { String getPassword() {
log.info(String.format("get password from secret: %s in namespace %s", elasticSearchProperties.getServer().getSecretName(), elasticSearchProperties.getServer().getNamespace())); LOG.debug(String.format("get password from secret: %s in namespace %s", elasticSearchProperties.getServer().getSecretName(),
elasticSearchProperties.getServer().getNamespace()));
var secret = getCredentialsSecret(); var secret = getCredentialsSecret();
log.info(String.format("secret data: %s", secret.getData()));
var password = getPasswordFromSecret(secret); var password = getPasswordFromSecret(secret);
log.info(String.format("used password: %s", password));
return password; return password;
} }
private Secret getCredentialsSecret() { private Secret getCredentialsSecret() {
return kubernetesService.getSecretResource(elasticSearchProperties.getServer().getNamespace(), elasticSearchProperties.getServer().getSecretName()).get(); return kubernetesService
.getSecretResource(elasticSearchProperties.getServer().getNamespace(), elasticSearchProperties.getServer().getSecretName()).get();
} }
private String getPasswordFromSecret(Secret secret) { private String getPasswordFromSecret(Secret secret) {
......
package de.ozgcloud.operator.common.elasticsearch; package de.ozgcloud.operator.common.elasticsearch;
import java.io.IOException; import java.io.IOException;
import java.util.logging.Level;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -13,9 +12,9 @@ import co.elastic.clients.elasticsearch.security.PutUserRequest; ...@@ -13,9 +12,9 @@ import co.elastic.clients.elasticsearch.security.PutUserRequest;
import de.ozgcloud.operator.PutRoleRequestData; import de.ozgcloud.operator.PutRoleRequestData;
import de.ozgcloud.operator.PutUserRequestData; import de.ozgcloud.operator.PutUserRequestData;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log; import lombok.extern.log4j.Log4j2;
@Log @Log4j2
@RequiredArgsConstructor @RequiredArgsConstructor
@Component @Component
public class ElasticsearchRemoteService { public class ElasticsearchRemoteService {
...@@ -24,24 +23,22 @@ public class ElasticsearchRemoteService { ...@@ -24,24 +23,22 @@ public class ElasticsearchRemoteService {
public boolean existsIndex(String index) throws Exception { public boolean existsIndex(String index) throws Exception {
try { try {
log.info("Exists index " + index + "..."); LOG.debug("Test if elasticsearch index {} exits.", index);
var exists = client.indices().exists(builder -> builder.index(index)).value(); var exists = client.indices().exists(builder -> builder.index(index)).value();
log.info("Exists index: " + exists); LOG.debug("Elasticsearch index exists: {}", exists);
return exists; return exists;
} catch (ElasticsearchException | IOException e) { } catch (ElasticsearchException | IOException e) {
log.log(Level.SEVERE, "Error checking index '" + index + "': " + e); throw new RuntimeException("Error checking index '" + index, e);
throw e;
} }
} }
public void createIndex(String indexName) throws Exception { public void createIndex(String indexName) throws Exception {
try { try {
log.info("Create index " + indexName + "..."); LOG.info("Create elasticsearch index {}", indexName);
client.indices().create(builder -> builder.index(indexName)); client.indices().create(builder -> builder.index(indexName));
log.info("Create index successful."); LOG.info("Create elasticsearch index {} successful", indexName);
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Create index failed." + e); throw new RuntimeException("Create elasticsearch index " + indexName + "failed.", e);
throw e;
} }
} }
...@@ -51,12 +48,11 @@ public class ElasticsearchRemoteService { ...@@ -51,12 +48,11 @@ public class ElasticsearchRemoteService {
public void createSecurityRole(PutRoleRequestData requestData) throws Exception { public void createSecurityRole(PutRoleRequestData requestData) throws Exception {
try { try {
log.info("Create SecurityRole " + requestData.getName() + "..."); LOG.info("Create elasticsearch role {}", requestData.getName());
client.security().putRole(createPutRoleRequest(requestData)); client.security().putRole(createPutRoleRequest(requestData));
log.info("Create SecurityRole successful."); LOG.info("Create elasticsearch role {} successful", requestData.getName());
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Create SecurityRole failed." + e); throw new RuntimeException("Create elasticsearch role " + requestData.getName() + "failed.", e);
throw e;
} }
} }
...@@ -84,12 +80,11 @@ public class ElasticsearchRemoteService { ...@@ -84,12 +80,11 @@ public class ElasticsearchRemoteService {
public void createSecurityUser(PutUserRequestData requestData) throws Exception { public void createSecurityUser(PutUserRequestData requestData) throws Exception {
try { try {
log.info("Create SecurityUser " + requestData.getUsername() + "..."); LOG.info("Create elasticsearch user {}", requestData.getUsername());
client.security().putUser(createPutUserRequest(requestData)); client.security().putUser(createPutUserRequest(requestData));
log.info("Create SecurityUser successful."); LOG.info("Create elasticsearch user {} successful", requestData.getUsername());
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Create SecurityUser failed." + e); throw new RuntimeException("Create elasticsearch user " + requestData.getUsername() + "failed.", e);
throw e;
} }
} }
...@@ -107,34 +102,31 @@ public class ElasticsearchRemoteService { ...@@ -107,34 +102,31 @@ public class ElasticsearchRemoteService {
public void deleteIndex(String indexName) throws Exception { public void deleteIndex(String indexName) throws Exception {
try { try {
log.info("Delete index " + indexName + "..."); LOG.info("Delete elasticsearch index {}", indexName);
client.indices().delete(builder -> builder.index(indexName)); client.indices().delete(builder -> builder.index(indexName));
log.info("Delete index successful."); LOG.info("Delete elasticsearch index {} successful", indexName);
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Delete index failed." + e); throw new RuntimeException("Delete elasticsearch index " + indexName + "failed.", e);
throw e;
} }
} }
public void deleteSecurityRole(String roleName) throws Exception { public void deleteSecurityRole(String roleName) throws Exception {
try { try {
log.info("Delete security role " + roleName + "..."); LOG.info("Delete elasticsearch role {}", roleName);
client.security().deleteRole(builder -> builder.name(roleName)); client.security().deleteRole(builder -> builder.name(roleName));
log.info("Delete security role successful."); LOG.info("Delete elasticsearch role {} successful", roleName);
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Delete security role failed." + e); throw new RuntimeException("Delete elasticsearch role " + roleName + "failed.", e);
throw e;
} }
} }
public void deleteSecurityUser(String userName) throws Exception { public void deleteSecurityUser(String userName) throws Exception {
try { try {
log.info("Delete security user " + userName + "..."); LOG.info("Delete elasticsearch user {}", userName);
client.security().deleteUser(builder -> builder.username(userName)); client.security().deleteUser(builder -> builder.username(userName));
log.info("Delete security user successful."); LOG.info("Delete elasticsearch user {} successful", userName);
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "Delete security user failed." + e); throw new RuntimeException("Delete elasticsearch user " + userName + "failed.", e);
throw e;
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment