@@ -45,6 +45,11 @@ export class KubeConfig {
4545 */
4646 public 'currentContext' : string ;
4747
48+ /**
49+ * Root directory for a config file driven config. Used for loading relative cert paths.
50+ */
51+ public 'rootDirectory' : string ;
52+
4853 public getContexts ( ) {
4954 return this . contexts ;
5055 }
@@ -97,6 +102,7 @@ export class KubeConfig {
97102 }
98103
99104 public loadFromFile ( file : string ) {
105+ this . rootDirectory = path . dirname ( file ) ;
100106 this . loadFromString ( fs . readFileSync ( file , 'utf8' ) ) ;
101107 }
102108
@@ -255,15 +261,15 @@ export class KubeConfig {
255261 if ( cluster != null && cluster . skipTLSVerify ) {
256262 opts . rejectUnauthorized = false ;
257263 }
258- const ca = cluster != null ? bufferFromFileOrString ( cluster . caFile , cluster . caData ) : null ;
264+ const ca = cluster != null ? bufferFromFileOrString ( this . rootDirectory , cluster . caFile , cluster . caData ) : null ;
259265 if ( ca ) {
260266 opts . ca = ca ;
261267 }
262- const cert = bufferFromFileOrString ( user . certFile , user . certData ) ;
268+ const cert = bufferFromFileOrString ( this . rootDirectory , user . certFile , user . certData ) ;
263269 if ( cert ) {
264270 opts . cert = cert ;
265271 }
266- const key = bufferFromFileOrString ( user . keyFile , user . keyData ) ;
272+ const key = bufferFromFileOrString ( this . rootDirectory , user . keyFile , user . keyData ) ;
267273 if ( key ) {
268274 opts . key = key ;
269275 }
@@ -355,8 +361,11 @@ export class Config {
355361}
356362
357363// This is public really only for testing.
358- export function bufferFromFileOrString ( file ?: string , data ?: string ) : Buffer | null {
364+ export function bufferFromFileOrString ( root ?: string , file ?: string , data ?: string ) : Buffer | null {
359365 if ( file ) {
366+ if ( ! path . isAbsolute ( file ) && root ) {
367+ file = path . join ( root , file ) ;
368+ }
360369 return fs . readFileSync ( file ) ;
361370 }
362371 if ( data ) {
0 commit comments