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

[Reporting] Add new ILM policy notice to deprecations service #100567

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
944c541
wip; added logic for creating ILM policy at start up
jloleysens May 14, 2021
13885c6
Merge branch 'master' into reporting/ilm-policy
kibanamachine May 17, 2021
c94974f
added log when ilm policy is not created
jloleysens May 17, 2021
cc739ba
added test for start function
jloleysens May 17, 2021
e9a27f7
updated ilm policy to not delete data
jloleysens May 17, 2021
385e170
actually update jest snapshots and remove unused import
jloleysens May 17, 2021
ccaa9a7
Merge branch 'master' into reporting/ilm-policy
kibanamachine May 18, 2021
bcabc5c
updated the ilm policy, removed the min_age for the hot phase
jloleysens May 18, 2021
37aa7fd
wip: integrate reporting with upgrade assistant
jloleysens May 18, 2021
d649f56
initial version of upgrade assistant integration
jloleysens May 19, 2021
812f82c
Merge branch 'master' of github.com:elastic/kibana into reporting/ua-…
jloleysens May 26, 2021
24ec3b7
remove TODO and added manual step
jloleysens May 26, 2021
bf030cb
removed unnecessary api request body
jloleysens May 26, 2021
7a0ff6d
added jest test for deprecations registration
jloleysens May 26, 2021
647827e
use the scoped elasticsearch user
jloleysens May 26, 2021
f9e66a3
added jest test for deprecations route
jloleysens May 26, 2021
d3d3211
added additional test for error responses
jloleysens May 26, 2021
cb5ecdc
fix i18n
jloleysens May 26, 2021
01189d9
Merge branch 'master' into reporting/ua-deprecation-ilm-policy
kibanamachine May 27, 2021
62989f7
- moved deprecations.ts to deprecations folder
jloleysens May 27, 2021
b769761
Merge branch 'master' into reporting/ua-deprecation-ilm-policy
kibanamachine Jun 2, 2021
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
1 change: 1 addition & 0 deletions x-pack/plugins/reporting/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ export const API_BASE_URL = '/api/reporting'; // "Generation URL" from share men
export const API_BASE_GENERATE = `${API_BASE_URL}/generate`;
export const API_LIST_URL = `${API_BASE_URL}/jobs`;
export const API_DIAGNOSE_URL = `${API_BASE_URL}/diagnose`;
export const API_MIGRATE_ILM_POLICY_URL = `${API_BASE_URL}/deprecations/migrate_ilm_policy`;

// hacky endpoint: download CSV without queueing a report
export const API_BASE_URL_V1 = '/api/reporting/v1'; //
Expand Down
107 changes: 0 additions & 107 deletions x-pack/plugins/reporting/server/deprecations.test.ts

This file was deleted.

52 changes: 0 additions & 52 deletions x-pack/plugins/reporting/server/deprecations.ts

This file was deleted.

28 changes: 28 additions & 0 deletions x-pack/plugins/reporting/server/deprecations/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { CoreSetup } from 'src/core/server';
import { ReportingCore } from '../core';

import { getDeprecationsInfo as getIlmPolicyDeprecationsInfo } from './migrate_existing_indices_ilm_policy';
import { getDeprecationsInfo as getReportingRoleDeprecationsInfo } from './reporting_role';

export const registerDeprecations = ({
core,
reportingCore,
}: {
core: CoreSetup;
reportingCore: ReportingCore;
}) => {
core.deprecations.registerDeprecations({
getDeprecations: async (ctx) => {
return [
...(await getIlmPolicyDeprecationsInfo(ctx, { reportingCore })),
...(await getReportingRoleDeprecationsInfo(ctx, { reportingCore })),
];
},
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import type { GetDeprecationsContext } from 'src/core/server';
import { elasticsearchServiceMock, savedObjectsClientMock } from 'src/core/server/mocks';

import { ReportingCore } from '../core';
import { createMockConfigSchema, createMockReportingCore } from '../test_helpers';

import { getDeprecationsInfo } from './migrate_existing_indices_ilm_policy';

type ScopedClusterClientMock = ReturnType<
typeof elasticsearchServiceMock.createScopedClusterClient
>;

const { createApiResponse } = elasticsearchServiceMock;

describe("Migrate existing indices' ILM policy deprecations", () => {
let esClient: ScopedClusterClientMock;
let deprecationsCtx: GetDeprecationsContext;
let reportingCore: ReportingCore;

beforeEach(async () => {
esClient = elasticsearchServiceMock.createScopedClusterClient();
deprecationsCtx = { esClient, savedObjectsClient: savedObjectsClientMock.create() };
reportingCore = await createMockReportingCore(createMockConfigSchema());
});

const createIndexSettings = (lifecycleName: string) => ({
aliases: {},
mappings: {},
settings: {
index: {
lifecycle: {
name: lifecycleName,
},
},
},
});

it('returns deprecation information when reporting indices are not using the reporting ILM policy', async () => {
esClient.asInternalUser.indices.getSettings.mockResolvedValueOnce(
createApiResponse({
body: {
indexA: createIndexSettings('not-reporting-lifecycle'),
indexB: createIndexSettings('kibana-reporting'),
},
})
);

expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot(`
Array [
Object {
"correctiveActions": Object {
"api": Object {
"method": "PUT",
"path": "/api/reporting/deprecations/migrate_ilm_policy",
},
"manualSteps": Array [
"Send a request to Elasticsearch that configures indices matching \\".reporting-*\\" to be managed by the \\"kibana-reporting\\" Index Lifecycle Policy.",
],
},
"level": "warning",
"message": "All new reporting indices will be managed by a provisioned ILM policy: \\"kibana-reporting\\". To manage the lifecycle of reports edit the kibana-reporting policy. Please note, this action will target all indices prefixed with \\".reporting-*\\".",
},
]
`);
});

it('does not return deprecations when all reporting indices are managed by the provisioned ILM policy', async () => {
esClient.asInternalUser.indices.getSettings.mockResolvedValueOnce(
createApiResponse({
body: {
indexA: createIndexSettings('kibana-reporting'),
indexB: createIndexSettings('kibana-reporting'),
},
})
);

expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot(
`Array []`
);

esClient.asInternalUser.indices.getSettings.mockResolvedValueOnce(
createApiResponse({
body: {},
})
);

expect(await getDeprecationsInfo(deprecationsCtx, { reportingCore })).toMatchInlineSnapshot(
`Array []`
);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import { i18n } from '@kbn/i18n';
import { DeprecationsDetails, GetDeprecationsContext } from 'src/core/server';
import { API_MIGRATE_ILM_POLICY_URL } from '../../common/constants';
import { ReportingCore } from '../core';

interface ExtraDependencies {
reportingCore: ReportingCore;
}

export const getDeprecationsInfo = async (
{ esClient }: GetDeprecationsContext,
{ reportingCore }: ExtraDependencies
): Promise<DeprecationsDetails[]> => {
const store = await reportingCore.getStore();
const reportingIlmPolicy = store.getIlmPolicyName();
const indexPattern = store.getReportingIndexPattern();

const { body: reportingIndicesSettings } = await esClient.asInternalUser.indices.getSettings({
index: indexPattern,
});

const someIndicesNotManagedByReportingIlm = Object.values(reportingIndicesSettings).some(
(settings) => settings?.settings?.index?.lifecycle?.name !== reportingIlmPolicy
);

if (someIndicesNotManagedByReportingIlm) {
return [
{
level: 'warning',
message: i18n.translate('xpack.reporting.deprecations.migrateIndexIlmPolicyActionMessage', {
defaultMessage: `All new reporting indices will be managed by a provisioned ILM policy: "{reportingIlmPolicy}". To manage the lifecycle of reports edit the {reportingIlmPolicy} policy. Please note, this action will target all indices prefixed with "{indexPattern}".`,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
defaultMessage: `All new reporting indices will be managed by a provisioned ILM policy: "{reportingIlmPolicy}". To manage the lifecycle of reports edit the {reportingIlmPolicy} policy. Please note, this action will target all indices prefixed with "{indexPattern}".`,
defaultMessage: `New reporting indices will be managed by the "{reportingIlmPolicy}" provisioned ILM policy. You must edit this policy to manage the report lifecycle. This change targets all indices prefixed with "{indexPattern}".`,

values: {
reportingIlmPolicy,
indexPattern,
},
}),
correctiveActions: {
api: {
method: 'PUT',
path: API_MIGRATE_ILM_POLICY_URL,
},
},
},
];
}

return [];
};
Loading