Skip to content
This repository was archived by the owner on Apr 10, 2024. It is now read-only.

Commit f224d7b

Browse files
authored
feat: generate config yaml to string for clients (#59)
1 parent 26431c1 commit f224d7b

File tree

11 files changed

+108
-6
lines changed

11 files changed

+108
-6
lines changed

core/src/main/java/io/javaoperatorsdk/jenvtest/KubeAPIServer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.slf4j.LoggerFactory;
55

66
import io.javaoperatorsdk.jenvtest.binary.BinaryManager;
7+
import io.javaoperatorsdk.jenvtest.cert.CertManager;
8+
import io.javaoperatorsdk.jenvtest.kubeconfig.KubeConfig;
79
import io.javaoperatorsdk.jenvtest.process.EtcdProcess;
810
import io.javaoperatorsdk.jenvtest.process.KubeAPIServerProcess;
911
import io.javaoperatorsdk.jenvtest.process.UnexpectedProcessStopHandler;
@@ -56,6 +58,10 @@ public void stop() {
5658
log.debug("Stopped");
5759
}
5860

61+
public String getKubeConfigYaml() {
62+
return kubeConfig.generateKubeConfigYaml(kubeApiServerProcess.getApiServerPort());
63+
}
64+
5965
@Override
6066
public void processStopped(Process process) {
6167
stop();

core/src/main/java/io/javaoperatorsdk/jenvtest/Utils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public static int findFreePort() {
5858
try (ServerSocket socket = new ServerSocket(0)) {
5959
return socket.getLocalPort();
6060
} catch (IOException e) {
61+
6162
}
6263
return -1;
6364
}

core/src/main/java/io/javaoperatorsdk/jenvtest/CertManager.java renamed to core/src/main/java/io/javaoperatorsdk/jenvtest/cert/CertManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.jenvtest;
1+
package io.javaoperatorsdk.jenvtest.cert;
22

33
import java.io.File;
44
import java.io.FileWriter;
@@ -27,6 +27,8 @@
2727
import org.slf4j.Logger;
2828
import org.slf4j.LoggerFactory;
2929

30+
import io.javaoperatorsdk.jenvtest.JenvtestException;
31+
3032
public class CertManager {
3133

3234
private static final Logger log = LoggerFactory.getLogger(CertManager.class);

core/src/main/java/io/javaoperatorsdk/jenvtest/KubeConfig.java renamed to core/src/main/java/io/javaoperatorsdk/jenvtest/kubeconfig/KubeConfig.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
package io.javaoperatorsdk.jenvtest;
1+
package io.javaoperatorsdk.jenvtest.kubeconfig;
22

33
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.nio.charset.StandardCharsets;
6+
import java.text.MessageFormat;
47
import java.util.ArrayList;
58
import java.util.List;
69

10+
import org.apache.commons.io.IOUtils;
711
import org.slf4j.Logger;
812
import org.slf4j.LoggerFactory;
913

14+
import io.javaoperatorsdk.jenvtest.JenvtestException;
1015
import io.javaoperatorsdk.jenvtest.binary.BinaryManager;
16+
import io.javaoperatorsdk.jenvtest.cert.CertManager;
1117

1218
public class KubeConfig {
1319

1420
private static final Logger log = LoggerFactory.getLogger(KubeConfig.class);
1521
public static final String JENVTEST = "jenvtest";
1622

17-
private CertManager certManager;
18-
private BinaryManager binaryManager;
23+
private final CertManager certManager;
24+
private final BinaryManager binaryManager;
1925

2026
public KubeConfig(CertManager certManager, BinaryManager binaryManager) {
2127
this.certManager = certManager;
@@ -47,6 +53,18 @@ private void unset(String target) {
4753
execWithKubectlConfigAndWait("unset", target);
4854
}
4955

56+
public String generateKubeConfigYaml(int apiServerPort) {
57+
try (InputStream is = KubeConfig.class.getResourceAsStream("/kubeconfig-template.yaml")) {
58+
String template = IOUtils.toString(is, StandardCharsets.UTF_8);
59+
Object[] args = new Object[] {certManager.getAPIServerCertPath(),
60+
apiServerPort, certManager.getClientCertPath(), certManager.getClientKeyPath()};
61+
MessageFormat format = new MessageFormat(template);
62+
return format.format(args);
63+
} catch (IOException e) {
64+
throw new JenvtestException(e);
65+
}
66+
}
67+
5068
private void execWithKubectlConfigAndWait(String... arguments) {
5169
try {
5270
List<String> args = new ArrayList<>(arguments.length + 2);

core/src/main/java/io/javaoperatorsdk/jenvtest/process/KubeAPIServerProcess.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import io.javaoperatorsdk.jenvtest.*;
2727
import io.javaoperatorsdk.jenvtest.binary.BinaryManager;
28+
import io.javaoperatorsdk.jenvtest.cert.CertManager;
2829

2930
import static io.javaoperatorsdk.jenvtest.KubeAPIServer.STARTUP_TIMEOUT;
3031

@@ -211,4 +212,8 @@ public void stopApiServer() {
211212
}
212213
log.debug("API Server stopped");
213214
}
215+
216+
public int getApiServerPort() {
217+
return apiServerPort;
218+
}
214219
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
clusters:
3+
- cluster:
4+
certificate-authority: {0}
5+
server: https://127.0.0.1:{1,number,#}
6+
name: jenvtest
7+
contexts:
8+
- context:
9+
cluster: jenvtest
10+
namespace: default
11+
user: jenvtest
12+
name: jenvtest
13+
current-context: jenvtest
14+
kind: Config
15+
preferences: '{'}
16+
users:
17+
- name: jenvtest
18+
user:
19+
client-certificate: {2}
20+
client-key: {3}

core/src/test/java/io/javaoperatorsdk/jenvtest/binary/BinaryManagerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ void throwsExceptionIfBinaryNotPresentAndInOfflineMode() {
1515
.withOfflineMode(true)
1616
.withApiServerVersion("1.0.1")
1717
.build());
18-
1918
assertThrows(JenvtestException.class, binaryManager::initAndDownloadIfRequired);
2019
}
2120

core/src/test/java/io/javaoperatorsdk/jenvtest/CertManagerTest.java renamed to core/src/test/java/io/javaoperatorsdk/jenvtest/cert/CertManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.javaoperatorsdk.jenvtest;
1+
package io.javaoperatorsdk.jenvtest.cert;
22

33
import java.io.File;
44
import java.io.IOException;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.javaoperatorsdk.jenvtest.kubeconfig;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import io.javaoperatorsdk.jenvtest.cert.CertManager;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
import static org.mockito.Mockito.mock;
9+
import static org.mockito.Mockito.when;
10+
11+
class KubeConfigTest {
12+
13+
public static final String API_CERT_PATH = "~/.jenvtest/certpath";
14+
public static final String CLIENT_KEY_PATH = "~/.jenvtest/clientcertkey";
15+
public static final String CLIENT_CERT_PATH = "~/.jenvtest/clientcertpath";
16+
public static final int API_SERVER_PORT = 32101;
17+
CertManager certManagerMock = mock(CertManager.class);
18+
KubeConfig kubeConfig = new KubeConfig(certManagerMock, null);
19+
20+
@Test
21+
void generatesConfigYaml() {
22+
when(certManagerMock.getAPIServerCertPath()).thenReturn(API_CERT_PATH);
23+
when(certManagerMock.getClientCertPath()).thenReturn(CLIENT_KEY_PATH);
24+
when(certManagerMock.getClientKeyPath()).thenReturn(CLIENT_CERT_PATH);
25+
26+
String yaml = kubeConfig.generateKubeConfigYaml(API_SERVER_PORT);
27+
28+
assertThat(yaml)
29+
.contains(""+API_SERVER_PORT)
30+
.contains(API_CERT_PATH)
31+
.contains(CLIENT_CERT_PATH)
32+
.contains(CLIENT_KEY_PATH);
33+
}
34+
35+
36+
}

samples/src/test/java/io/javaoperatorsdk/jenvtest/KubeApiServerTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.junit.jupiter.api.Test;
44

5+
import io.fabric8.kubernetes.client.Config;
56
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
67

78
import static io.javaoperatorsdk.jenvtest.TestUtils.NON_LATEST_API_SERVER_VERSION;
@@ -36,6 +37,19 @@ void usingWildcardVersion() {
3637
kubeApi.stop();
3738
}
3839

40+
@Test
41+
void creatingClientFromConfigString() {
42+
var kubeApi = new KubeAPIServer();
43+
kubeApi.start();
44+
45+
var client =
46+
new KubernetesClientBuilder().withConfig(Config.fromKubeconfig(kubeApi.getKubeConfigYaml()))
47+
.build();
48+
TestUtils.simpleTest(client);
49+
50+
kubeApi.stop();
51+
}
52+
3953
void testWithAPIServer(KubeAPIServer kubeApi) {
4054
kubeApi.start();
4155
simpleTest();

0 commit comments

Comments
 (0)