Skip to content

Commit d21542c

Browse files
committed
feat: load service account token from a different path
1 parent 35271d1 commit d21542c

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

src/config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ 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}`
214215

215216
let scheme = 'https';
216217
if (port === '80' || port === '8080' || port === '8001') {
@@ -237,7 +238,7 @@ export class KubeConfig {
237238
authProvider: {
238239
name: 'tokenFile',
239240
config: {
240-
tokenFile: `${pathPrefix}${Config.SERVICEACCOUNT_TOKEN_PATH}`,
241+
tokenFile
241242
},
242243
},
243244
},

src/config_test.ts

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,81 @@ 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+
159+
before(() => {
160+
originalTokenPath = process.env['TOKEN_FILE_PATH'];
161+
162+
delete process.env['TOKEN_FILE_PATH']
163+
})
164+
165+
after(() => {
166+
process.env['TOKEN_FILE_PATH'] = originalTokenPath
167+
})
168+
169+
it('should load from default env vars', () => {
170+
const kc = new KubeConfig();
171+
const cluster = {
172+
name: 'inCluster',
173+
server: 'https://undefined:undefined',
174+
skipTLSVerify: false,
175+
caFile: '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'
176+
} as Cluster;
177+
178+
const user = {
179+
authProvider: {
180+
name: 'tokenFile',
181+
config: {
182+
tokenFile: '/var/run/secrets/kubernetes.io/serviceaccount/token'
183+
}
184+
},
185+
name: 'inClusterUser'
186+
} as User;
187+
188+
kc.loadFromCluster();
189+
190+
const clusterOut = kc.getCurrentCluster();
191+
192+
expect(cluster).to.deep.equals(clusterOut)
193+
194+
const userOut = kc.getCurrentUser();
195+
expect(userOut).to.deep.equals(user);
196+
});
197+
198+
it('should support custom token file path', () => {
199+
const kc = new KubeConfig();
200+
process.env['TOKEN_FILE_PATH'] = '/etc/tokenFile'
201+
const cluster = {
202+
name: 'inCluster',
203+
server: 'https://undefined:undefined',
204+
skipTLSVerify: false,
205+
caFile: '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'
206+
} as Cluster;
207+
208+
const user = {
209+
authProvider: {
210+
name: 'tokenFile',
211+
config: {
212+
tokenFile: '/etc/tokenFile'
213+
}
214+
},
215+
name: 'inClusterUser'
216+
} as User;
217+
218+
kc.loadFromCluster();
219+
220+
const clusterOut = kc.getCurrentCluster();
221+
222+
expect(cluster).to.deep.equals(clusterOut)
223+
224+
const userOut = kc.getCurrentUser();
225+
expect(userOut).to.deep.equals(user);
226+
});
227+
153228
});
154229

155230
describe('clusterConstructor', () => {
@@ -490,6 +565,7 @@ describe('KubeConfig', () => {
490565
originalEnvVars.USERPROFILE = process.env.USERPROFILE;
491566
originalEnvVars.HOMEDRIVE = process.env.HOMEDRIVE;
492567
originalEnvVars.HOMEPATH = process.env.HOMEPATH;
568+
493569

494570
delete process.env.HOME;
495571
delete process.env.USERPROFILE;

0 commit comments

Comments
 (0)