Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import {
packagePolicyService,
licenseService,
} from '../../services';
import { type AgentClient, getLatestAvailableAgentVersion } from '../../services/agents';
import { type AgentClient } from '../../services/agents';
import {
AGENTS_PREFIX,
MAX_CONCURRENT_AGENT_POLICIES_OPERATIONS_10,
Expand Down Expand Up @@ -73,6 +73,7 @@ import { FLEET_API_PRIVILEGES } from '../../constants/api_privileges';
import { getAutoUpgradeAgentsStatus } from '../../services/agents';

import { createPackagePolicyHandler } from '../package_policy/handlers';
import { getLatestAgentAvailableDockerImageVersion } from '../../services/agents';

export async function populateAssignedAgentsCount(
agentClient: AgentClient,
Expand Down Expand Up @@ -684,7 +685,7 @@ export const getFullAgentPolicy: FleetRequestHandler<

if (request.query.kubernetes === true) {
const agentVersion =
await fleetContext.agentClient.asInternalUser.getLatestAgentAvailableVersion();
await fleetContext.agentClient.asInternalUser.getLatestAgentAvailableDockerImageVersion();
const fullAgentConfigMap = await agentPolicyService.getFullAgentConfigMap(
soClient,
request.params.agentPolicyId,
Expand Down Expand Up @@ -740,7 +741,7 @@ export const downloadFullAgentPolicy: FleetRequestHandler<

if (request.query.kubernetes === true) {
const agentVersion =
await fleetContext.agentClient.asInternalUser.getLatestAgentAvailableVersion();
await fleetContext.agentClient.asInternalUser.getLatestAgentAvailableDockerImageVersion();
const fullAgentConfigMap = await agentPolicyService.getFullAgentConfigMap(
soClient,
request.params.agentPolicyId,
Expand Down Expand Up @@ -793,7 +794,7 @@ export const getK8sManifest: FleetRequestHandler<
const fleetServer = request.query.fleetServer ?? '';
const token = request.query.enrolToken ?? '';

const agentVersion = await getLatestAvailableAgentVersion();
const agentVersion = await getLatestAgentAvailableDockerImageVersion();

const fullAgentManifest = await agentPolicyService.getFullAgentManifest(
fleetServer,
Expand Down Expand Up @@ -821,7 +822,7 @@ export const downloadK8sManifest: FleetRequestHandler<
> = async (context, request, response) => {
const fleetServer = request.query.fleetServer ?? '';
const token = request.query.enrolToken ?? '';
const agentVersion = await getLatestAvailableAgentVersion();
const agentVersion = await getLatestAgentAvailableDockerImageVersion();
const fullAgentManifest = await agentPolicyService.getFullAgentManifest(
fleetServer,
token,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jest.mock('../../services', () => ({
}));

jest.mock('../../services/agents', () => ({
getLatestAvailableAgentVersion: jest.fn().mockResolvedValue('1.0.0'),
getLatestAgentAvailableDockerImageVersion: jest.fn().mockResolvedValue('1.0.0'),
}));

describe('schema validation', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,9 @@ export { getAgentUploads, getAgentUploadFile, deleteAgentUploadFile } from './up
export { AgentServiceImpl } from './agent_service';
export type { AgentClient, AgentService } from './agent_service';
export { BulkActionsResolver } from './bulk_actions_resolver';
export { getAvailableVersions, getLatestAvailableAgentVersion } from './versions';
export {
getAvailableVersions,
getLatestAvailableAgentVersion,
getLatestAgentAvailableDockerImageVersion,
} from './versions';
export { getAutoUpgradeAgentsStatus } from './auto_upgrade_agents_status';
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ import type { DeepPartial } from 'utility-types';

import type { FleetConfigType } from '../../../public/plugin';

import { getAvailableVersions, getLatestAvailableAgentVersion } from './versions';
import {
getAvailableVersions,
getLatestAgentAvailableDockerImageVersion,
getLatestAvailableAgentVersion,
} from './versions';

let mockKibanaVersion = '300.0.0';
let mockConfig: DeepPartial<FleetConfigType> = {};
Expand Down Expand Up @@ -160,6 +164,44 @@ describe('getLatestAvailableAgentVersion', () => {
});
});

describe('getLatestAgentAvailableDockerImageVersion', () => {
it('should return latest available docker image version with + replaced by .', async () => {
mockKibanaVersion = '8.12.2';
mockedReadFile.mockResolvedValue(
`["8.13.0", "8.12.2+build20240501", "8.12.2+build20240501", "8.12.2", "8.12.1", "8.12.0"]`
);
mockedFetch.mockResolvedValueOnce({
status: 200,
text: jest.fn().mockResolvedValue(
JSON.stringify([
[
{
title: 'Elastic Agent 8.13.0',
version_number: '8.13.0',
},
{
title: 'Elastic Agent 8.12.2',
version_number: '8.12.2',
},
{
title: 'Elastic Agent 8.12.1',
version_number: '8.12.1',
},
{
title: 'Elastic Agent 8.12.0',
version_number: '8.12.0',
},
],
])
),
} as any);

const res = await getLatestAgentAvailableDockerImageVersion({ ignoreCache: true });

expect(res).toEqual('8.12.2.build20240501');
});
});

describe('getAvailableVersions', () => {
beforeEach(() => {
mockedReadFile.mockReset();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,17 @@ export const getLatestAvailableAgentVersion = async ({
return latestCompatibleVersion;
};

export const getLatestAgentAvailableDockerImageVersion = async ({
includeCurrentVersion = false,
ignoreCache = false,
}: {
includeCurrentVersion?: boolean;
ignoreCache?: boolean;
} = {}): Promise<string> => {
const fullVersion = await getLatestAvailableAgentVersion({ includeCurrentVersion, ignoreCache });
return fullVersion.replace('+', '.');
};

export const getAvailableVersions = async ({
includeCurrentVersion,
ignoreCache = false, // This is only here to allow us to ignore the cache in tests
Expand Down
Loading