Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fleet] Move to ISavedObjectsRepository for Saved Object access #121824

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion x-pack/plugins/apm/server/deprecations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import { GetDeprecationsContext, DeprecationsDetails } from 'src/core/server';
import { i18n } from '@kbn/i18n';
import { isEmpty } from 'lodash';
import type { ISavedObjectsRepository } from 'src/core/server';
import { CloudSetup } from '../../../cloud/server';
import {
getCloudAgentPolicy,
Expand Down Expand Up @@ -35,9 +36,13 @@ export function getDeprecations({
const docBranch = branch === 'main' ? 'master' : branch;

const fleetPluginStart = await fleet.start();

const internalSavedObjectsClient =
// @ts-ignore Conversion of type 'SavedObjectsClientContract' to type 'ISavedObjectsRepository'
savedObjectsClient as ISavedObjectsRepository;
const cloudAgentPolicy = await getCloudAgentPolicy({
fleetPluginStart,
savedObjectsClient,
savedObjectsClient: internalSavedObjectsClient,
});

const isCloudEnabled = !!cloudSetup?.isCloudEnabled;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
ElasticsearchClient,
SavedObjectsClientContract,
Logger,
ISavedObjectsRepository,
} from 'kibana/server';
import { PackagePolicy } from '../../../../fleet/common';
import {
Expand All @@ -27,6 +28,7 @@ export async function createCloudApmPackgePolicy({
cloudPluginSetup,
fleetPluginStart,
savedObjectsClient,
internalSavedObjectsClient,
esClient,
logger,
setup,
Expand All @@ -35,6 +37,7 @@ export async function createCloudApmPackgePolicy({
cloudPluginSetup: APMPluginSetupDependencies['cloud'];
fleetPluginStart: NonNullable<APMPluginStartDependencies['fleet']>;
savedObjectsClient: SavedObjectsClientContract;
internalSavedObjectsClient: ISavedObjectsRepository;
esClient: ElasticsearchClient;
logger: Logger;
setup: Setup;
Expand All @@ -61,7 +64,7 @@ export async function createCloudApmPackgePolicy({
});
logger.info(`Fleet migration on Cloud - apmPackagePolicy create start`);
const apmPackagePolicy = await fleetPluginStart.packagePolicyService.create(
savedObjectsClient,
internalSavedObjectsClient,
esClient,
mergedAPMPackagePolicy,
{ force: true, bumpRevision: true }
Expand Down
10 changes: 2 additions & 8 deletions x-pack/plugins/apm/server/routes/fleet/get_agents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
* 2.0.
*/

import {
CoreSetup,
CoreStart,
SavedObjectsClientContract,
} from 'kibana/server';
import { CoreSetup, CoreStart } from 'kibana/server';
import { APMPluginStartDependencies } from '../../types';
import { getInternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client';

Expand All @@ -22,9 +18,7 @@ export async function getFleetAgents({
core: { setup: CoreSetup; start: () => Promise<CoreStart> };
fleetPluginStart: NonNullable<APMPluginStartDependencies['fleet']>;
}) {
// @ts-ignore
const savedObjectsClient: SavedObjectsClientContract =
await getInternalSavedObjectsClient(core.setup);
const savedObjectsClient = await getInternalSavedObjectsClient(core.setup);

return await fleetPluginStart.agentPolicyService.getByIds(
savedObjectsClient,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
* 2.0.
*/

import {
CoreSetup,
CoreStart,
SavedObjectsClientContract,
} from 'kibana/server';
import { CoreSetup, CoreStart } from 'kibana/server';
import { APMPluginStartDependencies } from '../../types';
import { getInternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client';

Expand All @@ -20,9 +16,7 @@ export async function getApmPackgePolicies({
core: { setup: CoreSetup; start: () => Promise<CoreStart> };
fleetPluginStart: NonNullable<APMPluginStartDependencies['fleet']>;
}) {
// @ts-ignore
const savedObjectsClient: SavedObjectsClientContract =
await getInternalSavedObjectsClient(core.setup);
const savedObjectsClient = await getInternalSavedObjectsClient(core.setup);
return await fleetPluginStart.packagePolicyService.list(savedObjectsClient, {
kuery: 'ingest-package-policies.package.name:apm',
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import { SavedObjectsClientContract } from 'kibana/server';
import { ISavedObjectsRepository } from 'kibana/server';
import { Maybe } from '../../../typings/common';
import { AgentPolicy, PackagePolicy } from '../../../../fleet/common';
import { APMPluginStartDependencies } from '../../types';
Expand All @@ -18,7 +18,7 @@ export async function getCloudAgentPolicy({
savedObjectsClient,
}: {
fleetPluginStart: NonNullable<APMPluginStartDependencies['fleet']>;
savedObjectsClient: SavedObjectsClientContract;
savedObjectsClient: ISavedObjectsRepository;
}) {
try {
return await fleetPluginStart.agentPolicyService.get(
Expand Down
10 changes: 7 additions & 3 deletions x-pack/plugins/apm/server/routes/fleet/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,12 @@ const getMigrationCheckRoute = createApmServerRoute({
| undefined;
has_apm_integrations: boolean;
}> => {
const { core, plugins, context, config, request } = resources;
const { core, plugins, config, request } = resources;
const cloudApmMigrationEnabled = config.agent.migrations.enabled;
if (!plugins.fleet || !plugins.security) {
throw Boom.internal(FLEET_SECURITY_REQUIRED_MESSAGE);
}
const savedObjectsClient = context.core.savedObjects.client;
const savedObjectsClient = await getInternalSavedObjectsClient(core.setup);
const [fleetPluginStart, securityPluginStart] = await Promise.all([
plugins.fleet.start(),
plugins.security.start(),
Expand Down Expand Up @@ -210,13 +210,16 @@ const createCloudApmPackagePolicyRoute = createApmServerRoute({
): Promise<{
cloudApmPackagePolicy: import('./../../../../fleet/common/index').PackagePolicy;
}> => {
const { plugins, context, config, request, logger, kibanaVersion } =
const { plugins, context, config, request, logger, kibanaVersion, core } =
resources;
const cloudApmMigrationEnabled = config.agent.migrations.enabled;
if (!plugins.fleet || !plugins.security) {
throw Boom.internal(FLEET_SECURITY_REQUIRED_MESSAGE);
}
const savedObjectsClient = context.core.savedObjects.client;
const internalSavedObjectsClient = await getInternalSavedObjectsClient(
core.setup
);
const coreStart = await resources.core.start();
const esClient = coreStart.elasticsearch.client.asScoped(
resources.request
Expand All @@ -235,6 +238,7 @@ const createCloudApmPackagePolicyRoute = createApmServerRoute({
cloudPluginSetup,
fleetPluginStart,
savedObjectsClient,
internalSavedObjectsClient,
esClient,
logger,
setup,
Expand Down
4 changes: 2 additions & 2 deletions x-pack/plugins/apm/server/routes/fleet/source_maps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
CoreSetup,
CoreStart,
ElasticsearchClient,
SavedObjectsClientContract,
ISavedObjectsRepository,
} from 'kibana/server';
import { promisify } from 'util';
import { unzip } from 'zlib';
Expand Down Expand Up @@ -134,7 +134,7 @@ export async function updateSourceMapsOnFleetPolicies({
}: {
core: { setup: CoreSetup; start: () => Promise<CoreStart> };
fleetPluginStart: FleetPluginStart;
savedObjectsClient: SavedObjectsClientContract;
savedObjectsClient: ISavedObjectsRepository;
elasticsearchClient: ElasticsearchClient;
}) {
const artifacts = await listArtifacts({ fleetPluginStart });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,9 @@
* 2.0.
*/

import {
CoreSetup,
CoreStart,
SavedObjectsClientContract,
} from 'kibana/server';
import { CoreSetup, CoreStart } from 'kibana/server';
import { TelemetryUsageCounter } from '../typings';
import { APMPluginStartDependencies } from '../../types';
import { getInternalSavedObjectsClient } from '../../lib/helpers/get_internal_saved_objects_client';
import { Setup } from '../../lib/helpers/setup_request';
import { listConfigurations } from '../settings/agent_configuration/list_configurations';
import { getApmPackgePolicies } from './get_apm_package_policies';
Expand All @@ -36,16 +31,16 @@ export async function syncAgentConfigsToApmPackagePolicies({
});
}
const coreStart = await core.start();
const savedObjectsRepository =
coreStart.savedObjects.createInternalRepository();
const esClient = coreStart.elasticsearch.client.asInternalUser;
const [savedObjectsClient, agentConfigurations, packagePolicies] =
await Promise.all([
getInternalSavedObjectsClient(core.setup),
listConfigurations({ setup }),
getApmPackgePolicies({
core,
fleetPluginStart,
}),
]);
const [agentConfigurations, packagePolicies] = await Promise.all([
listConfigurations({ setup }),
getApmPackgePolicies({
core,
fleetPluginStart,
}),
]);

return Promise.all(
packagePolicies.items.map(async (item) => {
Expand All @@ -55,7 +50,7 @@ export async function syncAgentConfigsToApmPackagePolicies({
agentConfigurations
);
return fleetPluginStart.packagePolicyService.update(
savedObjectsClient as unknown as SavedObjectsClientContract,
savedObjectsRepository,
esClient,
id,
updatedPackagePolicy
Expand Down
7 changes: 2 additions & 5 deletions x-pack/plugins/apm/server/routes/source_maps/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
*/
import Boom from '@hapi/boom';
import * as t from 'io-ts';
import { SavedObjectsClientContract } from 'kibana/server';
import { jsonRt } from '@kbn/io-ts-utils';
import {
createApmArtifact,
Expand Down Expand Up @@ -101,8 +100,7 @@ const uploadSourceMapRoute = createApmServerRoute({
await updateSourceMapsOnFleetPolicies({
core,
fleetPluginStart,
savedObjectsClient:
savedObjectsClient as unknown as SavedObjectsClientContract,
savedObjectsClient,
elasticsearchClient: esClient,
});

Expand Down Expand Up @@ -137,8 +135,7 @@ const deleteSourceMapRoute = createApmServerRoute({
await updateSourceMapsOnFleetPolicies({
core,
fleetPluginStart,
savedObjectsClient:
savedObjectsClient as unknown as SavedObjectsClientContract,
savedObjectsClient,
elasticsearchClient: esClient,
});
}
Expand Down
4 changes: 2 additions & 2 deletions x-pack/plugins/fleet/server/collectors/agent_collectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import type { SavedObjectsClient, ElasticsearchClient } from 'kibana/server';
import type { ISavedObjectsRepository, ElasticsearchClient } from 'kibana/server';

import type { FleetConfigType } from '../../common/types';
import * as AgentService from '../services/agents';
Expand All @@ -21,7 +21,7 @@ export interface AgentUsage {

export const getAgentUsage = async (
config: FleetConfigType,
soClient?: SavedObjectsClient,
soClient?: ISavedObjectsRepository,
esClient?: ElasticsearchClient
): Promise<AgentUsage> => {
// TODO: unsure if this case is possible at all.
Expand Down
10 changes: 5 additions & 5 deletions x-pack/plugins/fleet/server/collectors/fleet_server_collector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/

import { isBoom } from '@hapi/boom';
import type { SavedObjectsClient, ElasticsearchClient } from 'kibana/server';
import type { ElasticsearchClient, ISavedObjectsRepository } from 'kibana/server';

import { packagePolicyService, settingsService } from '../services';
import { getAgentStatusForAgentPolicy } from '../services/agents';
Expand All @@ -32,15 +32,15 @@ export interface FleetServerUsage {
}

export const getFleetServerUsage = async (
soClient?: SavedObjectsClient,
soRepo?: ISavedObjectsRepository,
esClient?: ElasticsearchClient
): Promise<any> => {
if (!soClient || !esClient) {
if (!soRepo || !esClient) {
return DEFAULT_USAGE;
}

const numHostsUrls = await settingsService
.getSettings(soClient)
.getSettings(soRepo)
.then((settings) => settings.fleet_server_hosts?.length ?? 0)
.catch((err) => {
if (isBoom(err) && err.output.statusCode === 404) {
Expand All @@ -55,7 +55,7 @@ export const getFleetServerUsage = async (
const policyIds = new Set<string>();
let page = 1;
while (hasMore) {
const res = await packagePolicyService.list(soClient, {
const res = await packagePolicyService.list(soRepo, {
page: page++,
perPage: 20,
kuery: 'ingest-package-policies.package.name:fleet_server',
Expand Down
7 changes: 3 additions & 4 deletions x-pack/plugins/fleet/server/collectors/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@

import type { CoreSetup } from 'kibana/server';

import { SavedObjectsClient } from '../../../../../src/core/server';
import type { ElasticsearchClient } from '../../../../../src/core/server';
import type { ISavedObjectsRepository, ElasticsearchClient } from 'src/core/server';

export async function getInternalClients(
core: CoreSetup
): Promise<[SavedObjectsClient, ElasticsearchClient]> {
): Promise<[ISavedObjectsRepository, ElasticsearchClient]> {
return core.getStartServices().then(async ([coreStart]) => {
const savedObjectsRepo = coreStart.savedObjects.createInternalRepository();
const esClient = coreStart.elasticsearch.client.asInternalUser;
return [new SavedObjectsClient(savedObjectsRepo), esClient];
return [savedObjectsRepo, esClient];
});
}
12 changes: 7 additions & 5 deletions x-pack/plugins/fleet/server/collectors/package_collectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import type { SavedObjectsClient } from 'kibana/server';
import type { ISavedObjectsRepository } from 'kibana/server';
import _ from 'lodash';

import { getPackageSavedObjects } from '../services/epm/packages/get';
Expand All @@ -18,12 +18,14 @@ export interface PackageUsage {
enabled: boolean;
}

export const getPackageUsage = async (soClient?: SavedObjectsClient): Promise<PackageUsage[]> => {
if (!soClient) {
export const getPackageUsage = async (
soRepo?: ISavedObjectsRepository
): Promise<PackageUsage[]> => {
if (!soRepo) {
return [];
}
const packagesSavedObjects = await getPackageSavedObjects(soClient);
const agentPolicies = await agentPolicyService.list(soClient, {
const packagesSavedObjects = await getPackageSavedObjects(soRepo);
const agentPolicies = await agentPolicyService.list(soRepo, {
perPage: 1000, // avoiding pagination
withPackagePolicies: true,
});
Expand Down
8 changes: 4 additions & 4 deletions x-pack/plugins/fleet/server/collectors/register.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ export function registerFleetUsageCollector(
type: 'fleet',
isReady: () => true,
fetch: async () => {
const [soClient, esClient] = await getInternalClients(core);
const [soRepo, esClient] = await getInternalClients(core);
return {
agents_enabled: getIsAgentsEnabled(config),
agents: await getAgentUsage(config, soClient, esClient),
fleet_server: await getFleetServerUsage(soClient, esClient),
packages: await getPackageUsage(soClient),
agents: await getAgentUsage(config, soRepo, esClient),
fleet_server: await getFleetServerUsage(soRepo, esClient),
packages: await getPackageUsage(soRepo),
};
},
schema: {
Expand Down
4 changes: 2 additions & 2 deletions x-pack/plugins/fleet/server/mocks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
coreMock,
elasticsearchServiceMock,
loggingSystemMock,
savedObjectsClientMock,
savedObjectsRepositoryMock,
savedObjectsServiceMock,
} from '../../../../../src/core/server/mocks';
import { dataPluginMock } from '../../../../../src/plugins/data/server/mocks';
Expand Down Expand Up @@ -79,7 +79,7 @@ export const createFleetRequestHandlerContextMock = (): jest.Mocked<
asInternalUser: agentServiceMock.createClient(),
},
epm: {
internalSoClient: savedObjectsClientMock.create(),
savedObjectsRepo: savedObjectsRepositoryMock.create(),
},
spaceId: 'default',
};
Expand Down
Loading