diff --git a/x-pack/plugins/fleet/server/services/agents/versions.test.ts b/x-pack/plugins/fleet/server/services/agents/versions.test.ts index 9f8a5091e3ee2..85ac760614c49 100644 --- a/x-pack/plugins/fleet/server/services/agents/versions.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/versions.test.ts @@ -137,7 +137,7 @@ describe('getAvailableVersions', () => { }); it('should cache results', async () => { - mockKibanaVersion = '300.0.0'; + mockKibanaVersion = '9.0.0'; mockedReadFile.mockResolvedValue(`["8.1.0", "8.0.0", "7.17.0", "7.16.0"]`); mockedFetch.mockResolvedValueOnce({ status: 200, @@ -195,7 +195,7 @@ describe('getAvailableVersions', () => { const res = await getAvailableVersions({ ignoreCache: true }); // Should sort, uniquify and filter out versions < 7.17 - expect(res).toEqual(['8.1.0', '8.0.0', '7.17.0']); + expect(res).toEqual(['300.0.0', '8.1.0', '8.0.0', '7.17.0']); }); it('should gracefully handle network errors when fetching from product versions API', async () => { @@ -206,7 +206,7 @@ describe('getAvailableVersions', () => { const res = await getAvailableVersions({ ignoreCache: true }); // Should sort, uniquify and filter out versions < 7.17 - expect(res).toEqual(['8.1.0', '8.0.0', '7.17.0']); + expect(res).toEqual(['300.0.0', '8.1.0', '8.0.0', '7.17.0']); }); it('should not fetch from product versions API when air-gapped config is set', async () => { @@ -216,7 +216,7 @@ describe('getAvailableVersions', () => { mockConfig = { isAirGapped: true }; const res = await getAvailableVersions({ ignoreCache: true }); - expect(res).toEqual(['8.1.0', '8.0.0', '7.17.0']); + expect(res).toEqual(['300.0.0', '8.1.0', '8.0.0', '7.17.0']); expect(mockedFetch).not.toBeCalled(); }); }); diff --git a/x-pack/plugins/fleet/server/services/agents/versions.ts b/x-pack/plugins/fleet/server/services/agents/versions.ts index 39941e2d38fc9..de295a588bee9 100644 --- a/x-pack/plugins/fleet/server/services/agents/versions.ts +++ b/x-pack/plugins/fleet/server/services/agents/versions.ts @@ -88,11 +88,12 @@ export const getAvailableVersions = async ({ .filter((v: any) => semverGte(v, MINIMUM_SUPPORTED_VERSION)) .sort((a: any, b: any) => (semverGt(a, b) ? -1 : 1)); - // If the current stack version isn't included in the list of available versions, add it - // at the front of the array - const hasCurrentVersion = availableVersions.some((v) => v === kibanaVersion); - if (includeCurrentVersion && !hasCurrentVersion) { - availableVersions = [kibanaVersion, ...availableVersions]; + // if api versions are empty (air gapped or API not available), we add current kibana version, as the build file might not contain the latest released version + if ( + includeCurrentVersion || + (apiVersions.length === 0 && !config?.internal?.onlyAllowAgentUpgradeToKnownVersions) + ) { + availableVersions = uniq([kibanaVersion, ...availableVersions]); } // Allow upgrading to the current stack version if this override flag is provided via `kibana.yml`.