diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index c457da64ead07..f1cf8bdd3b9a2 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -105,7 +105,12 @@ import { getAuthzFromRequest, doesNotHaveRequiredFleetAuthz } from './security'; import { storedPackagePolicyToAgentInputs } from './agent_policies'; import { agentPolicyService } from './agent_policy'; -import { getPackageInfo, getInstallation, ensureInstalledPackage } from './epm/packages'; +import { + getPackageInfo, + getInstallation, + ensureInstalledPackage, + getInstallationObject, +} from './epm/packages'; import { getAssetsDataFromAssetsMap } from './epm/packages/assets'; import { compileTemplate } from './epm/agent/agent'; import { escapeSearchQueryPhrase, normalizeKuery as _normalizeKuery } from './saved_object'; @@ -1874,9 +1879,25 @@ class PackagePolicyClientImpl implements PackagePolicyClient { public async buildPackagePolicyFromPackage( soClient: SavedObjectsClientContract, pkgName: string, - logger?: Logger + options?: { logger?: Logger; installMissingPackage?: boolean } ): Promise { - const pkgInstall = await getInstallation({ savedObjectsClient: soClient, pkgName, logger }); + const pkgInstallObj = await getInstallationObject({ + savedObjectsClient: soClient, + pkgName, + logger: options?.logger, + }); + let pkgInstall = pkgInstallObj?.attributes; + if (!pkgInstall && options?.installMissingPackage) { + const esClient = await appContextService.getInternalUserESClient(); + const result = await ensureInstalledPackage({ + esClient, + pkgName, + savedObjectsClient: soClient, + }); + if (result.package) { + pkgInstall = result.package; + } + } if (pkgInstall) { const packageInfo = await getPackageInfo({ savedObjectsClient: soClient, diff --git a/x-pack/plugins/fleet/server/services/package_policy_service.ts b/x-pack/plugins/fleet/server/services/package_policy_service.ts index 46913642843cf..8bd96fd855312 100644 --- a/x-pack/plugins/fleet/server/services/package_policy_service.ts +++ b/x-pack/plugins/fleet/server/services/package_policy_service.ts @@ -164,7 +164,7 @@ export interface PackagePolicyClient { buildPackagePolicyFromPackage( soClient: SavedObjectsClientContract, pkgName: string, - logger?: Logger + options?: { logger?: Logger; installMissingPackage?: boolean } ): Promise; runExternalCallbacks( diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts index 52bb0eefcb84e..fe5f74529121e 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts @@ -52,7 +52,7 @@ export class SyntheticsPrivateLocation { const newPolicy = await this.server.fleet.packagePolicyService.buildPackagePolicyFromPackage( soClient, 'synthetics', - this.server.logger + { logger: this.server.logger, installMissingPackage: true } ); if (!newPolicy) {