[Fleet] Enhance fleet package policies bulkCreate API (#140513)

This commit is contained in:
Shahzad 2022-09-12 18:28:28 +02:00 committed by GitHub
parent c151f32123
commit 11b6ca8160
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 14 deletions

View file

@ -469,8 +469,10 @@ class AgentPolicyService {
await packagePolicyService.bulkCreate(
soClient,
esClient,
newPackagePolicies,
newAgentPolicy.id,
newPackagePolicies.map((newPackagePolicy) => ({
...newPackagePolicy,
policy_id: newAgentPolicy.id,
})),
{
...options,
bumpRevision: false,

View file

@ -228,26 +228,37 @@ class PackagePolicyService implements PackagePolicyServiceInterface {
public async bulkCreate(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
packagePolicies: NewPackagePolicy[],
agentPolicyId: string,
options?: { user?: AuthenticatedUser; bumpRevision?: boolean; force: true }
packagePolicies: NewPackagePolicyWithId[],
options?: {
user?: AuthenticatedUser;
bumpRevision?: boolean;
force?: true;
}
): Promise<PackagePolicy[]> {
await validateIsNotHostedPolicy(soClient, agentPolicyId);
const agentPolicyIds = new Set(packagePolicies.map((pkgPol) => pkgPol.policy_id));
for (const agentPolicyId of agentPolicyIds) {
await validateIsNotHostedPolicy(soClient, agentPolicyId, options?.force);
}
const isoDate = new Date().toISOString();
// eslint-disable-next-line @typescript-eslint/naming-convention
const { saved_objects } = await soClient.bulkCreate<PackagePolicySOAttributes>(
packagePolicies.map((packagePolicy) => {
const packagePolicyId = uuid.v4();
const packagePolicyId = packagePolicy.id ?? uuid.v4();
const agentPolicyId = packagePolicy.policy_id;
const inputs = packagePolicy.inputs.map((input) =>
assignStreamIdToInput(packagePolicyId, input)
);
const { id, ...pkgPolicyWithoutId } = packagePolicy;
return {
type: SAVED_OBJECT_TYPE,
id: packagePolicyId,
attributes: {
...packagePolicy,
...pkgPolicyWithoutId,
inputs,
policy_id: agentPolicyId,
revision: 1,
@ -266,9 +277,11 @@ class PackagePolicyService implements PackagePolicyServiceInterface {
// Assign it to the given agent policy
if (options?.bumpRevision ?? true) {
await agentPolicyService.bumpRevision(soClient, esClient, agentPolicyId, {
user: options?.user,
});
for (const agentPolicyIdT of agentPolicyIds) {
await agentPolicyService.bumpRevision(soClient, esClient, agentPolicyIdT, {
user: options?.user,
});
}
}
return newSos.map((newSo) => ({
@ -1339,6 +1352,11 @@ function _enforceFrozenVars(
return resultVars;
}
export interface NewPackagePolicyWithId extends NewPackagePolicy {
id?: string;
policy_id: string;
}
export interface PackagePolicyServiceInterface {
create(
soClient: SavedObjectsClientContract,
@ -1360,9 +1378,12 @@ export interface PackagePolicyServiceInterface {
bulkCreate(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
packagePolicies: NewPackagePolicy[],
agentPolicyId: string,
options?: { user?: AuthenticatedUser; bumpRevision?: boolean }
packagePolicies: NewPackagePolicyWithId[],
options?: {
user?: AuthenticatedUser;
bumpRevision?: boolean;
force?: true;
}
): Promise<PackagePolicy[]>;
get(soClient: SavedObjectsClientContract, id: string): Promise<PackagePolicy | null>;