From 238d643a8e7cfea027e69b1bdd2f06ba7255f292 Mon Sep 17 00:00:00 2001 From: Alan Ren Date: Tue, 21 Jul 2020 13:36:23 -0700 Subject: [PATCH] handle invalid character in kubectl version output (#11460) --- .../src/services/tools/kubeCtlTool.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/extensions/resource-deployment/src/services/tools/kubeCtlTool.ts b/extensions/resource-deployment/src/services/tools/kubeCtlTool.ts index b394d805d3..3bfcf115ce 100644 --- a/extensions/resource-deployment/src/services/tools/kubeCtlTool.ts +++ b/extensions/resource-deployment/src/services/tools/kubeCtlTool.ts @@ -14,6 +14,13 @@ const localize = nls.loadMessageBundle(); const defaultInstallationRoot = '/usr/local/bin'; export const KubeCtlToolName = 'kubectl'; +interface KubeCtlVersion { + clientVersion: { + major: string; + minor: string; + }; +} + export class KubeCtlTool extends ToolBase { constructor(platformService: IPlatformService) { super(platformService); @@ -42,8 +49,9 @@ export class KubeCtlTool extends ToolBase { protected getVersionFromOutput(output: string): SemVer | undefined { let version: SemVer | undefined = undefined; if (output) { - const versionJson = JSON.parse(output); - version = new SemVer(`${versionJson.clientVersion.major}.${versionJson.clientVersion.minor}.0`); + const versionJson: KubeCtlVersion = JSON.parse(output); + // kubectl version output might contain '+' character in the minor version, e.g. 16+, we have to remove it to make it a valid semantic version string. + version = new SemVer(`${versionJson.clientVersion.major}.${versionJson.clientVersion.minor.replace(/\+/g, '')}.0`); } return version; }