Skip to content

Commit 46a268f

Browse files
authored
[Ingest Manager] fix removing ingest pipelines from elasticsearch (#75092)
* fix removing ingest pipelines bug * undo unneeded changes to default.yml entry pipeline
1 parent 48deb7b commit 46a268f

File tree

8 files changed

+121
-21
lines changed

8 files changed

+121
-21
lines changed

x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/ingest_pipeline/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
export { installPipelines } from './install';
88

9-
export { deletePipelines, deletePipeline } from './remove';
9+
export { deletePreviousPipelines, deletePipeline } from './remove';

x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/ingest_pipeline/remove.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,43 @@ import { SavedObjectsClientContract } from 'src/core/server';
88
import { appContextService } from '../../../';
99
import { CallESAsCurrentUser, ElasticsearchAssetType } from '../../../../types';
1010
import { getInstallation } from '../../packages/get';
11-
import { PACKAGES_SAVED_OBJECT_TYPE } from '../../../../../common';
11+
import { PACKAGES_SAVED_OBJECT_TYPE, EsAssetReference } from '../../../../../common';
1212

13-
export const deletePipelines = async (
13+
export const deletePreviousPipelines = async (
1414
callCluster: CallESAsCurrentUser,
1515
savedObjectsClient: SavedObjectsClientContract,
1616
pkgName: string,
17-
pkgVersion: string
17+
previousPkgVersion: string
1818
) => {
1919
const logger = appContextService.getLogger();
20-
const previousPipelinesPattern = `*-${pkgName}.*-${pkgVersion}`;
21-
20+
const installation = await getInstallation({ savedObjectsClient, pkgName });
21+
if (!installation) return;
22+
const installedEsAssets = installation.installed_es;
23+
const installedPipelines = installedEsAssets.filter(
24+
({ type, id }) =>
25+
type === ElasticsearchAssetType.ingestPipeline && id.includes(previousPkgVersion)
26+
);
27+
const deletePipelinePromises = installedPipelines.map(({ type, id }) => {
28+
return deletePipeline(callCluster, id);
29+
});
2230
try {
23-
await deletePipeline(callCluster, previousPipelinesPattern);
31+
await Promise.all(deletePipelinePromises);
2432
} catch (e) {
2533
logger.error(e);
2634
}
2735
try {
28-
await deletePipelineRefs(savedObjectsClient, pkgName, pkgVersion);
36+
await deletePipelineRefs(savedObjectsClient, installedEsAssets, pkgName, previousPkgVersion);
2937
} catch (e) {
3038
logger.error(e);
3139
}
3240
};
3341

3442
export const deletePipelineRefs = async (
3543
savedObjectsClient: SavedObjectsClientContract,
44+
installedEsAssets: EsAssetReference[],
3645
pkgName: string,
3746
pkgVersion: string
3847
) => {
39-
const installation = await getInstallation({ savedObjectsClient, pkgName });
40-
if (!installation) return;
41-
const installedEsAssets = installation.installed_es;
4248
const filteredAssets = installedEsAssets.filter(({ type, id }) => {
4349
if (type !== ElasticsearchAssetType.ingestPipeline) return true;
4450
if (!id.includes(pkgVersion)) return true;

x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import * as Registry from '../registry';
2222
import { getInstallation, getInstallationObject, isRequiredPackage } from './index';
2323
import { installTemplates } from '../elasticsearch/template/install';
2424
import { generateESIndexPatterns } from '../elasticsearch/template/template';
25-
import { installPipelines, deletePipelines } from '../elasticsearch/ingest_pipeline/';
25+
import { installPipelines, deletePreviousPipelines } from '../elasticsearch/ingest_pipeline/';
2626
import { installILMPolicy } from '../elasticsearch/ilm/install';
2727
import {
2828
installKibanaAssets,
@@ -183,7 +183,7 @@ export async function installPackage({
183183

184184
// if this is an update, delete the previous version's pipelines
185185
if (installedPkg && !reinstall) {
186-
await deletePipelines(
186+
await deletePreviousPipelines(
187187
callCluster,
188188
savedObjectsClient,
189189
pkgName,

x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ export default function (providerContext: FtrProviderContext) {
6161
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}`,
6262
});
6363
expect(res.statusCode).equal(200);
64+
const resPipeline1 = await es.transport.request({
65+
method: 'GET',
66+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline1`,
67+
});
68+
expect(resPipeline1.statusCode).equal(200);
69+
const resPipeline2 = await es.transport.request({
70+
method: 'GET',
71+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline2`,
72+
});
73+
expect(resPipeline2.statusCode).equal(200);
6474
});
6575
it('should have installed the template components', async function () {
6676
const res = await es.transport.request({
@@ -135,6 +145,14 @@ export default function (providerContext: FtrProviderContext) {
135145
id: 'logs-all_assets.test_logs-0.1.0',
136146
type: 'ingest_pipeline',
137147
},
148+
{
149+
id: 'logs-all_assets.test_logs-0.1.0-pipeline1',
150+
type: 'ingest_pipeline',
151+
},
152+
{
153+
id: 'logs-all_assets.test_logs-0.1.0-pipeline2',
154+
type: 'ingest_pipeline',
155+
},
138156
{
139157
id: 'logs-all_assets.test_logs',
140158
type: 'index_template',
@@ -195,6 +213,26 @@ export default function (providerContext: FtrProviderContext) {
195213
}
196214
);
197215
expect(res.statusCode).equal(404);
216+
const resPipeline1 = await es.transport.request(
217+
{
218+
method: 'GET',
219+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline1`,
220+
},
221+
{
222+
ignore: [404],
223+
}
224+
);
225+
expect(resPipeline1.statusCode).equal(404);
226+
const resPipeline2 = await es.transport.request(
227+
{
228+
method: 'GET',
229+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline2`,
230+
},
231+
{
232+
ignore: [404],
233+
}
234+
);
235+
expect(resPipeline2.statusCode).equal(404);
198236
});
199237
it('should have uninstalled the kibana assets', async function () {
200238
let resDashboard;

x-pack/test/ingest_manager_api_integration/apis/epm/update_assets.ts

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,24 +154,49 @@ export default function (providerContext: FtrProviderContext) {
154154
},
155155
});
156156
});
157-
it('should have installed the new versionized pipeline', async function () {
157+
it('should have installed the new versionized pipelines', async function () {
158158
const res = await es.transport.request({
159159
method: 'GET',
160160
path: `/_ingest/pipeline/${logsTemplateName}-${pkgUpdateVersion}`,
161161
});
162162
expect(res.statusCode).equal(200);
163+
const resPipeline1 = await es.transport.request({
164+
method: 'GET',
165+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgUpdateVersion}-pipeline1`,
166+
});
167+
expect(resPipeline1.statusCode).equal(200);
163168
});
164169
it('should have removed the old versionized pipelines', async function () {
165-
let res;
166-
try {
167-
res = await es.transport.request({
170+
const res = await es.transport.request(
171+
{
168172
method: 'GET',
169173
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}`,
170-
});
171-
} catch (err) {
172-
res = err;
173-
}
174+
},
175+
{
176+
ignore: [404],
177+
}
178+
);
174179
expect(res.statusCode).equal(404);
180+
const resPipeline1 = await es.transport.request(
181+
{
182+
method: 'GET',
183+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline1`,
184+
},
185+
{
186+
ignore: [404],
187+
}
188+
);
189+
expect(resPipeline1.statusCode).equal(404);
190+
const resPipeline2 = await es.transport.request(
191+
{
192+
method: 'GET',
193+
path: `/_ingest/pipeline/${logsTemplateName}-${pkgVersion}-pipeline2`,
194+
},
195+
{
196+
ignore: [404],
197+
}
198+
);
199+
expect(resPipeline2.statusCode).equal(404);
175200
});
176201
it('should have updated the template components', async function () {
177202
const res = await es.transport.request({
@@ -272,6 +297,10 @@ export default function (providerContext: FtrProviderContext) {
272297
id: 'logs-all_assets.test_logs-0.2.0',
273298
type: 'ingest_pipeline',
274299
},
300+
{
301+
id: 'logs-all_assets.test_logs-0.2.0-pipeline1',
302+
type: 'ingest_pipeline',
303+
},
275304
{
276305
id: 'logs-all_assets.test_logs',
277306
type: 'index_template',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
description: Pipeline test
3+
processors:
4+
- remove:
5+
field: messag
6+
on_failure:
7+
- set:
8+
field: error.message
9+
value: "{{ _ingest.on_failure_message }}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
description: Pipeline test
3+
processors:
4+
- remove:
5+
field: messag
6+
on_failure:
7+
- set:
8+
field: error.message
9+
value: "{{ _ingest.on_failure_message }}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
description: Pipeline test
3+
processors:
4+
- remove:
5+
field: messag
6+
on_failure:
7+
- set:
8+
field: error.message
9+
value: "{{ _ingest.on_failure_message }}"

0 commit comments

Comments
 (0)