Skip to content

Commit

Permalink
[Fleet] Fix - Increment system package name when adding agent policy …
Browse files Browse the repository at this point in the history
…with monitoring (#118403) (#118545)

Co-authored-by: Cristina Amico <criamico@users.noreply.github.com>
  • Loading branch information
kibanamachine and criamico authored Nov 15, 2021
1 parent 448788d commit a216558
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
4 changes: 4 additions & 0 deletions x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import type {
GetFullAgentConfigMapResponse,
} from '../../../common';
import { defaultIngestErrorHandler } from '../../errors';
import { incrementPackageName } from '../../services/package_policy';

export const getAgentPoliciesHandler: RequestHandler<
undefined,
Expand Down Expand Up @@ -108,6 +109,7 @@ export const createAgentPolicyHandler: RequestHandler<
const esClient = context.core.elasticsearch.client.asCurrentUser;
const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined;
const withSysMonitoring = request.query.sys_monitoring ?? false;

try {
// eslint-disable-next-line prefer-const
let [agentPolicy, newSysPackagePolicy] = await Promise.all<
Expand All @@ -131,6 +133,8 @@ export const createAgentPolicyHandler: RequestHandler<
if (withSysMonitoring && newSysPackagePolicy !== undefined && agentPolicy !== undefined) {
newSysPackagePolicy.policy_id = agentPolicy.id;
newSysPackagePolicy.namespace = agentPolicy.namespace;
newSysPackagePolicy.name = await incrementPackageName(soClient, FLEET_SYSTEM_PACKAGE);

await packagePolicyService.create(soClient, esClient, newSysPackagePolicy, {
user,
bumpRevision: false,
Expand Down
27 changes: 27 additions & 0 deletions x-pack/plugins/fleet/server/services/package_policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1195,3 +1195,30 @@ function deepMergeVars(original: any, override: any): any {

return result;
}

export async function incrementPackageName(
soClient: SavedObjectsClientContract,
packageName: string
) {
// Fetch all packagePolicies having the package name
const packagePolicyData = await packagePolicyService.list(soClient, {
perPage: 1,
kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: "${packageName}"`,
});

// Retrieve highest number appended to package policy name and increment it by one
const pkgPoliciesNamePattern = new RegExp(`${packageName}-(\\d+)`);

const pkgPoliciesWithMatchingNames = packagePolicyData?.items
? packagePolicyData.items
.filter((ds) => Boolean(ds.name.match(pkgPoliciesNamePattern)))
.map((ds) => parseInt(ds.name.match(pkgPoliciesNamePattern)![1], 10))
.sort()
: [];

return `${packageName}-${
pkgPoliciesWithMatchingNames.length
? pkgPoliciesWithMatchingNames[pkgPoliciesWithMatchingNames.length - 1] + 1
: 1
}`;
}

0 comments on commit a216558

Please sign in to comment.