mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Fleet] Add prerelease option to preconfigured package (#172399)
This commit is contained in:
parent
7afcc820ee
commit
2fe91d32b7
6 changed files with 62 additions and 10 deletions
|
@ -33,7 +33,9 @@ export interface PreconfiguredAgentPolicy extends Omit<NewAgentPolicy, 'namespac
|
|||
>;
|
||||
}
|
||||
|
||||
export type PreconfiguredPackage = Omit<PackagePolicyPackage, 'title'>;
|
||||
export interface PreconfiguredPackage extends Omit<PackagePolicyPackage, 'title'> {
|
||||
prerelease?: boolean;
|
||||
}
|
||||
|
||||
export interface PreconfiguredOutput extends Omit<Output, 'config_yaml'> {
|
||||
config?: Record<string, unknown>;
|
||||
|
|
|
@ -19,7 +19,7 @@ import type { BulkInstallResponse, IBulkInstallPackageError } from './install';
|
|||
|
||||
interface BulkInstallPackagesParams {
|
||||
savedObjectsClient: SavedObjectsClientContract;
|
||||
packagesToInstall: Array<string | { name: string; version: string }>;
|
||||
packagesToInstall: Array<string | { name: string; version?: string; prerelease?: boolean }>;
|
||||
esClient: ElasticsearchClient;
|
||||
force?: boolean;
|
||||
spaceId: string;
|
||||
|
@ -41,11 +41,26 @@ export async function bulkInstallPackages({
|
|||
|
||||
const packagesResults = await Promise.allSettled(
|
||||
packagesToInstall.map(async (pkg) => {
|
||||
if (typeof pkg !== 'string') {
|
||||
return Promise.resolve(pkg);
|
||||
if (typeof pkg === 'string') {
|
||||
return Registry.fetchFindLatestPackageOrThrow(pkg, {
|
||||
prerelease,
|
||||
}).then((pkgRes) => ({
|
||||
name: pkgRes.name,
|
||||
version: pkgRes.version,
|
||||
prerelease: undefined,
|
||||
}));
|
||||
}
|
||||
if (pkg.version !== undefined) {
|
||||
return Promise.resolve(pkg as { name: string; version: string; prerelease?: boolean });
|
||||
}
|
||||
|
||||
return Registry.fetchFindLatestPackageOrThrow(pkg, { prerelease });
|
||||
return Registry.fetchFindLatestPackageOrThrow(pkg.name, {
|
||||
prerelease: prerelease || pkg.prerelease,
|
||||
}).then((pkgRes) => ({
|
||||
name: pkgRes.name,
|
||||
version: pkgRes.version,
|
||||
prerelease: pkg.prerelease,
|
||||
}));
|
||||
})
|
||||
);
|
||||
|
||||
|
@ -97,7 +112,7 @@ export async function bulkInstallPackages({
|
|||
installSource: 'registry',
|
||||
spaceId,
|
||||
force,
|
||||
prerelease,
|
||||
prerelease: prerelease || ('prerelease' in pkgKeyProps && pkgKeyProps.prerelease),
|
||||
authorizationHeader,
|
||||
});
|
||||
|
||||
|
|
|
@ -122,10 +122,18 @@ function getPutPreconfiguredPackagesMock() {
|
|||
|
||||
jest.mock('./epm/registry', () => ({
|
||||
...jest.requireActual('./epm/registry'),
|
||||
async fetchFindLatestPackageOrThrow(packageName: string): Promise<RegistrySearchResult> {
|
||||
async fetchFindLatestPackageOrThrow(
|
||||
packageName: string,
|
||||
options?: { prerelease?: boolean }
|
||||
): Promise<RegistrySearchResult> {
|
||||
let latestVersion = '1.0.0';
|
||||
if (options?.prerelease && packageName === 'test_package') {
|
||||
latestVersion = '3.0.1-beta.1';
|
||||
}
|
||||
|
||||
return {
|
||||
name: packageName,
|
||||
version: '1.0.0',
|
||||
version: latestVersion,
|
||||
description: '',
|
||||
release: 'experimental',
|
||||
title: '',
|
||||
|
@ -368,6 +376,25 @@ describe('policy preconfiguration', () => {
|
|||
expect(nonFatalErrors.length).toBe(0);
|
||||
});
|
||||
|
||||
it('should install prelease packages if needed', async () => {
|
||||
const soClient = getPutPreconfiguredPackagesMock();
|
||||
const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
|
||||
|
||||
const { policies, packages, nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies(
|
||||
soClient,
|
||||
esClient,
|
||||
[] as PreconfiguredAgentPolicy[],
|
||||
[{ name: 'test_package', version: 'latest', prerelease: true }],
|
||||
mockDefaultOutput,
|
||||
mockDefaultDownloadService,
|
||||
DEFAULT_SPACE_ID
|
||||
);
|
||||
|
||||
expect(policies.length).toEqual(0);
|
||||
expect(packages).toEqual(expect.arrayContaining(['test_package-3.0.1-beta.1']));
|
||||
expect(nonFatalErrors.length).toBe(0);
|
||||
});
|
||||
|
||||
it('should not add new package policy to existing non managed policies', async () => {
|
||||
const soClient = getPutPreconfiguredPackagesMock();
|
||||
const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
|
||||
|
|
|
@ -78,8 +78,11 @@ export async function ensurePreconfiguredPackagesAndPolicies(
|
|||
}
|
||||
|
||||
const packagesToInstall = packages.map((pkg) =>
|
||||
pkg.version === PRECONFIGURATION_LATEST_KEYWORD ? pkg.name : pkg
|
||||
pkg.version === PRECONFIGURATION_LATEST_KEYWORD
|
||||
? { name: pkg.name, prerelease: pkg.prerelease }
|
||||
: pkg
|
||||
);
|
||||
|
||||
// Preinstall packages specified in Kibana config
|
||||
const preconfiguredPackages = await bulkInstallPackages({
|
||||
savedObjectsClient: soClient,
|
||||
|
|
|
@ -39,6 +39,7 @@ export const PreconfiguredPackagesSchema = schema.arrayOf(
|
|||
}
|
||||
},
|
||||
}),
|
||||
prerelease: schema.maybe(schema.boolean()),
|
||||
}),
|
||||
{
|
||||
defaultValue: [],
|
||||
|
|
|
@ -186,7 +186,11 @@ export const BulkInstallPackagesFromRegistryRequestSchema = {
|
|||
packages: schema.arrayOf(
|
||||
schema.oneOf([
|
||||
schema.string(),
|
||||
schema.object({ name: schema.string(), version: schema.string() }),
|
||||
schema.object({
|
||||
name: schema.string(),
|
||||
version: schema.string(),
|
||||
prerelease: schema.maybe(schema.boolean()),
|
||||
}),
|
||||
]),
|
||||
{ minSize: 1 }
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue