Skip to content

Commit

Permalink
Correctly removing index pattern fields
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathan-buttner committed Oct 8, 2020
1 parent 1cefc8e commit fd3fd01
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ export async function removeInstallation(options: {
`unable to remove package with existing package policy(s) in use by agent(s)`
);

// recreate or delete index patterns when a package is uninstalled
await installIndexPatterns(savedObjectsClient);

// Delete the installed assets
const installedAssets = [...installation.installed_kibana, ...installation.installed_es];
await deleteAssets(installedAssets, savedObjectsClient, callCluster);
Expand All @@ -55,6 +52,11 @@ export async function removeInstallation(options: {
// could also update with [] or some other state
await savedObjectsClient.delete(PACKAGES_SAVED_OBJECT_TYPE, pkgName);

// recreate or delete index patterns when a package is uninstalled
// this must be done after deleting the saved object for the current package otherwise it will retrieve the package
// from the registry again and reinstall the index patterns
await installIndexPatterns(savedObjectsClient);

// remove the package archive and its contents from the cache so that a reinstall fetches
// a fresh copy from the registry
deletePackageCache(pkgName, pkgVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ export default function (providerContext: FtrProviderContext) {
before(async () => {
await installPackage(pkgKey);
});
after(async () => {
await uninstallPackage(pkgKey);
});
it('should have installed the ILM policy', async function () {
const resPolicy = await es.transport.request({
method: 'GET',
Expand Down Expand Up @@ -200,6 +203,7 @@ export default function (providerContext: FtrProviderContext) {
describe('uninstalls all assets when uninstalling a package', async () => {
skipIfNoDockerRegistry(providerContext);
before(async () => {
await installPackage(pkgKey);
await uninstallPackage(pkgKey);
});
it('should have uninstalled the index templates', async function () {
Expand Down Expand Up @@ -324,6 +328,35 @@ export default function (providerContext: FtrProviderContext) {
}
expect(resSearch.response.data.statusCode).equal(404);
});
it('should have removed the fields from the index patterns', async () => {
try {
const resIndexPatternLogs = await kibanaServer.savedObjects.get({
type: 'index-pattern',
id: 'logs-*',
});
const fields = JSON.parse(resIndexPatternLogs.attributes.fields);
const exists = fields.find((field: { name: string }) => field.name === 'logs_test_name');
expect(exists).to.be(undefined);
} catch (err) {
// if all packages are uninstalled there won't be a logs-* index pattern
expect(err.response.data.statusCode).equal(404);
}

try {
const resIndexPatternMetrics = await kibanaServer.savedObjects.get({
type: 'index-pattern',
id: 'metrics-*',
});
const fieldsMetrics = JSON.parse(resIndexPatternMetrics.attributes.fields);
const existsMetrics = fieldsMetrics.find(
(field: { name: string }) => field.name === 'metrics_test_name'
);
expect(existsMetrics).to.be(undefined);
} catch (err) {
// if all packages are uninstalled there won't be a metrics-* index pattern
expect(err.response.data.statusCode).equal(404);
}
});
it('should have removed the saved object', async function () {
let res;
try {
Expand Down

0 comments on commit fd3fd01

Please sign in to comment.