11package io .kubernetes .client .util ;
22
33import io .kubernetes .client .ApiClient ;
4- import io .kubernetes .client .ApiException ;
5- import io .kubernetes .client .Configuration ;
6- import io .kubernetes .client .apis .CoreV1Api ;
7- import io .kubernetes .client .models .V1Pod ;
8- import io .kubernetes .client .models .V1PodList ;
94
105import java .io .BufferedReader ;
116import java .io .ByteArrayInputStream ;
1712import java .io .IOException ;
1813import java .io .Reader ;
1914import java .io .UnsupportedEncodingException ;
20- import java .security .KeyStoreException ;
21- import java .security .NoSuchAlgorithmException ;
22- import java .security .UnrecoverableKeyException ;
23- import java .security .cert .CertificateException ;
24- import java .util .ArrayList ;
2515import java .util .List ;
26- import java .util .Map ;
2716
2817import javax .net .ssl .KeyManager ;
2918import javax .net .ssl .KeyManagerFactory ;
3019
31- import org .yaml .snakeyaml .Yaml ;
32- import org .yaml .snakeyaml .constructor .SafeConstructor ;
33-
3420public class Config {
3521 private static final String SERVICEACCOUNT_ROOT =
3622 "/var/run/secrets/kubernetes.io/serviceaccount" ;
@@ -97,55 +83,16 @@ public static ApiClient fromConfig(InputStream stream) {
9783 }
9884
9985 public static ApiClient fromConfig (Reader input ) {
100- // Note to the reader: I considered creating a Config object
101- // and parsing into that instead of using Maps, but honestly
102- // this seemed cleaner than a bunch of boilerplate classes
103- Yaml yaml = new Yaml (new SafeConstructor ());
104- Object config = yaml .load (input );
105- Map <String , Object > configMap = (Map <String , Object >)config ;
106-
107- ArrayList <Object > clusters = (ArrayList <Object >)configMap .get ("clusters" );
108- ArrayList <Object > contexts = (ArrayList <Object >)configMap .get ("contexts" );
109- ArrayList <Object > users = (ArrayList <Object >)configMap .get ("users" );
110- String currentContext = (String )configMap .get ("current-context" );
111-
112- Map <String , Object > contextMap = findObject (contexts , currentContext );
113- if (contextMap == null ) {
114- return null ;
115- }
116- contextMap = (Map <String , Object >)contextMap .get ("context" );
117-
118- String user = (String )contextMap .get ("user" );
119- String cluster = (String )contextMap .get ("cluster" );
120-
121- Map <String , Object > clusterMap = findObject (clusters , cluster );
122- if (clusterMap == null ) {
123- return null ;
124- }
125- clusterMap = (Map <String , Object >)clusterMap .get ("cluster" );
126-
127- Map <String , Object > userMap = findObject (users , user );
128- if (user == null ) {
129- return null ;
130- }
131- userMap = (Map <String , Object >)userMap .get ("user" );
132-
133- String server = (String ) clusterMap .get ("server" );
134- String caCert = (String ) clusterMap .get ("certificate-authority-data" );
135- String caCertFile = (String ) clusterMap .get ("certificate-authority" );
136-
86+ KubeConfig config = KubeConfig .loadKubeConfig (input );
13787 ApiClient client = new ApiClient ();
138- client .setBasePath (server );
139-
140- String clientCertificate = (String ) userMap .get ("client-certificate" );
141- String clientCertificateData = (String ) userMap .get ("client-certificate-data" );
142- String clientKey = (String ) userMap .get ("client-key" );
143- String clientKeyData = (String ) userMap .get ("client-key-data" );
88+ client .setBasePath (config .getServer ());
14489
14590 try {
14691 KeyManager [] mgrs = SSLUtils .keyManagers (
147- clientCertificateData , clientCertificate ,
148- clientKeyData , clientKey ,
92+ config .getClientCertificateData (),
93+ config .getClientCertificateFile (),
94+ config .getClientKeyData (),
95+ config .getClientKeyFile (),
14996 "RSA" , "" ,
15097 null , null );
15198 client .setKeyManagers (mgrs );
@@ -157,6 +104,8 @@ public static ApiClient fromConfig(Reader input) {
157104 // consumes the CA cert, so if we do this before the client certs
158105 // are injected the cert input stream is exhausted and things get
159106 // grumpy'
107+ String caCert = config .getCertificateAuthorityData ();
108+ String caCertFile = config .getCertificateAuthorityFile ();
160109 if (caCert != null ) {
161110 try {
162111 client .setSslCaCert (new ByteArrayInputStream (caCert .getBytes ("UTF-8" )));
@@ -171,26 +120,21 @@ public static ApiClient fromConfig(Reader input) {
171120 }
172121 }
173122
174- Object authProvider = userMap .get ("auth-provider" );
175- if (authProvider != null ) {
176- Map <String , Object > authProviderMap = (Map <String , Object >) authProvider ;
177- Map <String , Object > authConfig = (Map <String , Object >) authProviderMap .get ("config" );
178- if (authConfig != null ) {
179- String token = (String ) authConfig .get ("access-token" );
180- client .setAccessToken (token );
181- }
123+ String token = config .getAccessToken ();
124+ if (token != null ) {
125+ client .setAccessToken (token );
182126 }
183127
184- return client ;
185- }
128+ String username = config .getUsername ();
129+ if (username != null ) {
130+ client .setUsername (username );
131+ }
186132
187- private static Map <String , Object > findObject (ArrayList <Object > list , String name ) {
188- for (Object obj : list ) {
189- Map <String , Object > map = (Map <String , Object >)obj ;
190- if (name .equals ((String )map .get ("name" ))) {
191- return map ;
192- }
133+ String password = config .getPassword ();
134+ if (password != null ) {
135+ client .setPassword (password );
193136 }
194- return null ;
137+
138+ return client ;
195139 }
196- }
140+ }
0 commit comments