Skip to content

Commit de18d0e

Browse files
committed
feat: load service account token from a different path
1 parent 4e7e17d commit de18d0e

File tree

2 files changed

+95
-2
lines changed

2 files changed

+95
-2
lines changed

src/config.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,8 @@ export class KubeConfig {
211211
const clusterName = 'inCluster';
212212
const userName = 'inClusterUser';
213213
const contextName = 'inClusterContext';
214+
const tokenFile = process.env.TOKEN_FILE_PATH ? process.env.TOKEN_FILE_PATH : `${pathPrefix}${Config.SERVICEACCOUNT_TOKEN_PATH}`;
215+
const caFile = process.env.KUBERNETES_CA_FILE_PATH ? process.env.KUBERNETES_CA_FILE_PATH : `${pathPrefix}${Config.SERVICEACCOUNT_CA_PATH}`;
214216

215217
let scheme = 'https';
216218
if (port === '80' || port === '8080' || port === '8001') {
@@ -226,7 +228,7 @@ export class KubeConfig {
226228
this.clusters = [
227229
{
228230
name: clusterName,
229-
caFile: `${pathPrefix}${Config.SERVICEACCOUNT_CA_PATH}`,
231+
caFile,
230232
server: `${scheme}://${serverHost}:${port}`,
231233
skipTLSVerify: false,
232234
},
@@ -237,7 +239,7 @@ export class KubeConfig {
237239
authProvider: {
238240
name: 'tokenFile',
239241
config: {
240-
tokenFile: `${pathPrefix}${Config.SERVICEACCOUNT_TOKEN_PATH}`,
242+
tokenFile
241243
},
242244
},
243245
},

src/config_test.ts

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,96 @@ describe('KubeConfig', () => {
150150
const userOut = kc.getCurrentUser();
151151
expect(userOut).to.equal(user);
152152
});
153+
154+
});
155+
156+
describe('loadFromCluster', () => {
157+
let originalTokenPath: string | undefined;
158+
let originalCaFilePath: string | undefined;
159+
160+
before(() => {
161+
originalTokenPath = process.env['TOKEN_FILE_PATH'];
162+
originalCaFilePath = process.env['KUBERNETES_CA_FILE_PATH']
163+
164+
delete process.env['TOKEN_FILE_PATH']
165+
delete process.env['KUBERNETES_CA_FILE_PATH']
166+
})
167+
168+
after(() => {
169+
170+
delete process.env['TOKEN_FILE_PATH']
171+
delete process.env['KUBERNETES_CA_FILE_PATH']
172+
173+
if (originalTokenPath){
174+
process.env['TOKEN_FILE_PATH'] = originalTokenPath
175+
}
176+
177+
if (originalCaFilePath) {
178+
process.env['KUBERNETES_CA_FILE_PATH'] = originalCaFilePath
179+
}
180+
})
181+
182+
it('should load from default env vars', () => {
183+
const kc = new KubeConfig();
184+
const cluster = {
185+
name: 'inCluster',
186+
server: 'https://undefined:undefined',
187+
skipTLSVerify: false,
188+
caFile: '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'
189+
} as Cluster;
190+
191+
const user = {
192+
authProvider: {
193+
name: 'tokenFile',
194+
config: {
195+
tokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token'
196+
}
197+
},
198+
name: 'inClusterUser'
199+
} as User;
200+
201+
kc.loadFromCluster();
202+
203+
const clusterOut = kc.getCurrentCluster();
204+
205+
expect(cluster).to.deep.equals(clusterOut)
206+
207+
const userOut = kc.getCurrentUser();
208+
expect(userOut).to.deep.equals(user);
209+
});
210+
211+
it('should support custom token file path', () => {
212+
const kc = new KubeConfig();
213+
process.env['TOKEN_FILE_PATH'] = '/etc/tokenFile'
214+
process.env['KUBERNETES_CA_FILE_PATH'] = '/etc/ca.crt'
215+
216+
const cluster = {
217+
name: 'inCluster',
218+
server: 'https://undefined:undefined',
219+
skipTLSVerify: false,
220+
caFile: '/etc/ca.crt'
221+
} as Cluster;
222+
223+
const user = {
224+
authProvider: {
225+
name: 'tokenFile',
226+
config: {
227+
tokenFile: '/etc/tokenFile'
228+
}
229+
},
230+
name: 'inClusterUser'
231+
} as User;
232+
233+
kc.loadFromCluster();
234+
235+
const clusterOut = kc.getCurrentCluster();
236+
237+
expect(cluster).to.deep.equals(clusterOut)
238+
239+
const userOut = kc.getCurrentUser();
240+
expect(userOut).to.deep.equals(user);
241+
});
242+
153243
});
154244

155245
describe('clusterConstructor', () => {
@@ -490,6 +580,7 @@ describe('KubeConfig', () => {
490580
originalEnvVars.USERPROFILE = process.env.USERPROFILE;
491581
originalEnvVars.HOMEDRIVE = process.env.HOMEDRIVE;
492582
originalEnvVars.HOMEPATH = process.env.HOMEPATH;
583+
493584

494585
delete process.env.HOME;
495586
delete process.env.USERPROFILE;

0 commit comments

Comments
 (0)