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

OZG-4453 OZG-4670 cleanup; fix tests after cleanup

parent 7f61144c
No related branches found
No related tags found
No related merge requests found
package de.ozgcloud.operator.common.kubernetes;
import java.util.Objects;
import org.springframework.stereotype.Component;
import io.fabric8.kubernetes.api.model.EnvVar;
import io.fabric8.kubernetes.api.model.EnvVarBuilder;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.batch.v1.Job;
import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.dsl.Resource;
import lombok.RequiredArgsConstructor;
......@@ -20,165 +13,7 @@ public class KubernetesService {
private final KubernetesClient client;
public boolean existNamespace(String namespace) {
return Objects.nonNull(client.namespaces().withName(namespace).get());
}
public Resource<Secret> getSecretResource(String namespace, String name) {
return client.secrets().inNamespace(namespace).withName(name);
}
//PoC
public Pod doInPod(String namespace, String podName) {
// client.batch().v1().jobs().inNamespace(namespace).createOrReplace(job);
client.batch().v1().raw(podName);
return client.pods().inNamespace(namespace).withName(podName).get();
}
public void executeJob(String namespace) {
var ELASTIC_USER_SECRET_NAME = "ozg-search-cluster-es-elastic-user";
var ELASTIC_SYSTEM_NAMESPACE = "elastic-system";
var ELASTIC_USER_SECRET_ELASTIC = "elastic";
var secretResource = getSecretResource(ELASTIC_SYSTEM_NAMESPACE, ELASTIC_USER_SECRET_NAME);
if(Objects.isNull(secretResource.get())) {
//Error - elastic-system namespace secret not exists
}
var password = secretResource.get().getStringData().get(ELASTIC_USER_SECRET_ELASTIC);
var jobEnvs = buildEnvVars(namespace, password);
}
private Job buildJob(String jobName) {
return new JobBuilder()
.withApiVersion("batch/v1")
.withNewMetadata()
.withName(jobName)
.endMetadata()
.withNewSpec()
.withBackoffLimit(4)//TOCHECK: notwendig? wofür?
.withNewTemplate()
.withNewSpec()
.withRestartPolicy("Never")
//containers START
.addNewContainer()
.withName("es-create-access")
.withImage("manusant/curl-jq")
.withEnv(buildEnvVars("password", "namespace"))
.withCommand("/bin/sh", "-c")
.withArgs("echo \"Job started\"; i=1; while [ $i -le $MAX_COUNT ]; do echo $i; i=$((i+1)) ; sleep 1;done; echo \"Job Done!\"")
.endContainer()
//containers END
.endSpec()
.endTemplate()
.endSpec().build();
}
\ No newline at end of file
static final String ELASTICSEARCH_NAMESPACE_PASSWORD_FIELD = "ES_NS_PASSWORD";
static final String ELASTICSEARCH_NAMESPACE_USER_FIELD = "ES_NS_USER";
static final String ELASTICSEARCH_CLUSTER_FIELD = "ES_CLUSTER";
static final String ELASTICSEARCH_PASSWORD_FIELD = "ELASTICSEARCH_PASSWORD";
private EnvVar buildEnvVars(String namespace, String password) {
// - name: ES_NS_PASSWORD
// value: "{{ elasticsearch_user_password }}"
// - name: ES_NS_USER
// value: "{{ kommune }}"
// - name: ES_CLUSTER
// value: "{{ kommune }}"
// - name: ELASTICSEARCH_PASSWORD
// valueFrom:
// secretKeyRef:
// name: ozg-search-cluster-es-elastic-user
// key: elastic
// command:
return new EnvVarBuilder()
.withName(ELASTICSEARCH_NAMESPACE_PASSWORD_FIELD).withValue(password)
.withName(ELASTICSEARCH_NAMESPACE_USER_FIELD).withValue(namespace)
.withName(ELASTICSEARCH_CLUSTER_FIELD).withValue(namespace)
.withName(ELASTICSEARCH_PASSWORD_FIELD).withValue(password)
.build();
}
}
//apiVersion: batch/v1
//kind: Job
//metadata:
// name: es-create-access-{{ kommune }}
//spec:
// parallelism: 1
// completions: 1
// template:
// metadata:
// name: es-create-access-{{ kommune }}
// spec:
// restartPolicy: Never
// containers:
// - name: es-create-access
// image: manusant/curl-jq
// env:
// - name: ES_NS_PASSWORD
// value: "{{ elasticsearch_user_password }}"
// - name: ES_NS_USER
// value: "{{ kommune }}"
// - name: ES_CLUSTER
// value: "{{ kommune }}"
// - name: ELASTICSEARCH_PASSWORD
// valueFrom:
// secretKeyRef:
// name: ozg-search-cluster-es-elastic-user
// key: elastic
// command:
// - /bin/sh
// - -c
// - |
// curl -k -X PUT -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json' 'https://ozg-search-cluster-es-http:9200/'$ES_NS_USER
// initContainers:
// - name: create-es-role
// image: manusant/curl-jq
// env:
// - name: ES_NS_PASSWORD
// value: "{{ elasticsearch_user_password }}"
// - name: ES_NS_USER
// value: "{{ kommune }}"
// - name: ES_CLUSTER
// value: "{{ kommune }}"
// - name: ELASTICSEARCH_PASSWORD
// valueFrom:
// secretKeyRef:
// name: ozg-search-cluster-es-elastic-user
// key: elastic
// command:
// - /bin/sh
// - -c
// - |
// curl -k -X POST -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json' 'https://ozg-search-cluster-es-http:9200/_security/role/'$ES_NS_USER -d '{ "indices": [ { "names": [ "'$ES_NS_USER'*" ], "privileges": ["all"] } ] }'
// - name: create-es-user
// image: manusant/curl-jq
// env:
// - name: ES_NS_PASSWORD
// value: "{{ elasticsearch_user_password }}"
// - name: ES_NS_USER
// value: "{{ kommune }}"
// - name: ES_CLUSTER
// value: "{{ kommune }}"
// - name: ELASTICSEARCH_PASSWORD
// valueFrom:
// secretKeyRef:
// name: ozg-search-cluster-es-elastic-user
// key: elastic
// command:
// - /bin/sh
// - -c
// - |
// curl -k -X POST -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json' 'https://ozg-search-cluster-es-http:9200/_security/user/'$ES_NS_USER -d '{"password" : "'$ES_NS_PASSWORD'" ,"roles" : [ "'$ES_NS_USER'" ]}'
\ No newline at end of file
......@@ -2,8 +2,6 @@ package de.ozgcloud.operator.common.kubernetes;
import static org.assertj.core.api.Assertions.*;
import java.net.HttpURLConnection;
import org.junit.Rule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
......@@ -11,7 +9,6 @@ import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import de.ozgcloud.operator.user.ObjectMetaTestFactory;
import io.fabric8.kubernetes.api.model.Namespace;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.extension.ResourceAdapter;
......@@ -32,57 +29,25 @@ class KubernetesServiceTest {
service = new KubernetesService(client);
}
@DisplayName("Exist namespace")
@Nested
class TestExistNamespace {
private final Namespace namespace = NamespaceTestFactory.create();
@Test
public void shouldReturnTrueIfExistsWithCrud() {
var namespaceResource = client.namespaces().withName(ObjectMetaTestFactory.NAMESPACE);
var adapter = new ResourceAdapter<>(namespaceResource);
adapter.create(namespace);
var exists = service.existNamespace(ObjectMetaTestFactory.NAMESPACE);
assertThat(exists).isTrue();
}
@Test
public void shouldReturnTrueIfExists() {
server.expect().get().withPath("/api/v1/namespaces/" + ObjectMetaTestFactory.NAMESPACE)
.andReturn(HttpURLConnection.HTTP_OK, namespace)
.once();
var exists = service.existNamespace(ObjectMetaTestFactory.NAMESPACE);
assertThat(exists).isTrue();
}
@Test
public void shouldReturnFalseIfMissing() {
var exists = service.existNamespace(ObjectMetaTestFactory.NAMESPACE);
assertThat(exists).isFalse();
}
}
@DisplayName("Get secret")
@Nested
class TestGetSecret {
private final Secret secret = SecretTestFactory.create();
private Secret secret = SecretTestFactory.create();
@Test
void shouldReturnExistingResourceIfExists() {
server.expect().get().withPath("/api/v1/namespaces/" + ObjectMetaTestFactory.NAMESPACE + "/secrets/" + SecretTestFactory.NAME)
.andReturn(HttpURLConnection.HTTP_OK, secret)
.once();
createSecret();
var secret = getSecret();
assertThat(secret).isNotNull();
assertThat(secret).isNotNull().isEqualTo(secret);
}
private void createSecret() {
var secretResource = client.secrets().withName(SecretTestFactory.NAME);
var adapter = new ResourceAdapter<>(secretResource);
adapter.create(secret);
}
@Test
......@@ -96,14 +61,4 @@ class KubernetesServiceTest {
return service.getSecretResource(ObjectMetaTestFactory.NAMESPACE, SecretTestFactory.NAME).get();
}
}
//PoC
@Nested
class TestDoInPod {
@Test
void doSomething() {
var pod = service.doInPod("test", "pod");
}
}
}
\ No newline at end of file
......@@ -7,22 +7,17 @@ import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import de.ozgcloud.operator.common.kubernetes.KubernetesService;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import lombok.SneakyThrows;
class ElasticUserReconcilerTest {
@Spy
@InjectMocks
private ElasticUserReconciler reconciler;
@Mock
private ElasticUserService service;
@Mock
private KubernetesService kubernetesService;
@DisplayName("Reconcile")
@Nested
......
......@@ -33,7 +33,7 @@ class ElasticUserSecretBuilderTest {
void shouldContainName() {
var secret = builder.build(resource, secretName);
assertThat(secret.getMetadata().getName()).isEqualTo(ElasticUserSecretBuilder.SECRET_TYPE);
assertThat(secret.getMetadata().getName()).isEqualTo(secretName);
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment