Skip to content

Commit

Permalink
Merge pull request #7677 from debsmita1/fix-delete-app-error
Browse files Browse the repository at this point in the history
Bug 1911474: Delete Devfile Application Group without any errors
  • Loading branch information
openshift-merge-robot committed Jan 7, 2021
2 parents 1736192 + 72e2474 commit d796ceb
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 15 deletions.
@@ -1,5 +1,10 @@
import { FirehoseResult } from '@console/internal/components/utils';
import { DeploymentKind, PodKind, ImagePullPolicy } from '@console/internal/module/k8s';
import {
DeploymentKind,
PodKind,
ImagePullPolicy,
K8sResourceKind,
} from '@console/internal/module/k8s';

export const sampleDeploymentConfigs: FirehoseResult = {
loaded: true,
Expand Down Expand Up @@ -3306,6 +3311,57 @@ export const sampleClusterServiceVersions: FirehoseResult = {
loaded: true,
};

export const sampleSecrets: K8sResourceKind[] = [
{
kind: 'Secret',
metadata: {
name: 'secret-1',
namespace: 'ns',
uid: '3d7aeb10-c568-4aa5-b1c6-90500a6d50a6',
resourceVersion: '102027',
creationTimestamp: '2019-04-26T10:23:41Z',
annotations: {
'kubernetes.io/service-account.name': 'builder',
'kubernetes.io/service-account.uid': '150b818b-2081-46a4-a563-17ee5d29035a',
'openshift.io/token-secret.name': 'builder-token-tnrj6',
'openshift.io/token-secret.value': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjJ3enFHdFZPTlkyOElFT21K',
},
},
},
{
kind: 'Secret',
metadata: {
name: 'secret-2',
namespace: 'ns',
uid: '3d7aeb10-c568-4aa5-b1c6-90500a6d50a6',
resourceVersion: '102027',
creationTimestamp: '2019-04-26T10:23:41Z',
annotations: {
'kubernetes.io/service-account.name': 'builder',
'kubernetes.io/service-account.uid': '150b818b-2081-46a4-a563-17ee5d29035a',
'openshift.io/token-secret.name': 'builder-token-tnrj6',
'openshift.io/token-secret.value': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjJ3enFHdFZPTlkyOElFT21K',
},
},
},
{
kind: 'Secret',
metadata: {
name: 'nodejs-generic-webhook-secret',
namespace: 'ns',
uid: '3d7aeb10-c568-4aa5-b1c6-90500a6d50a6',
resourceVersion: '102027',
creationTimestamp: '2019-04-26T10:23:41Z',
annotations: {
'kubernetes.io/service-account.name': 'builder',
'kubernetes.io/service-account.uid': '150b818b-2081-46a4-a563-17ee5d29035a',
'openshift.io/token-secret.name': 'builder-token-tnrj6',
'openshift.io/token-secret.value': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjJ3enFHdFZPTlkyOElFT21K',
},
},
},
];

export const MockResources = {
deployments: sampleDeployments,
deploymentConfigs: sampleDeploymentConfigs,
Expand Down
Expand Up @@ -13,6 +13,7 @@ import {
MockResources,
sampleBuildConfigs,
sampleBuilds,
sampleSecrets,
} from '@console/shared/src/utils/__tests__/test-resource-data';
import { OdcNodeModel, TopologyDataResources } from '../../topology-types';
import { WORKLOAD_TYPES } from '../topology-utils';
Expand Down Expand Up @@ -45,6 +46,7 @@ describe('ApplicationUtils ', () => {
let spyK8sGet;
let mockBuilds = [];
let mockBuildConfigs = [];
let mockSecrets = [];

beforeEach(() => {
spy = spyOn(k8s, 'k8sKill');
Expand All @@ -60,6 +62,9 @@ describe('ApplicationUtils ', () => {
if (model.kind === 'BuildConfig') {
return Promise.resolve(mockBuildConfigs);
}
if (model.kind === 'Secret') {
return Promise.resolve(mockSecrets);
}
return Promise.resolve([]);
});
});
Expand All @@ -68,18 +73,19 @@ describe('ApplicationUtils ', () => {
const nodeModel = await getTopologyData(MockResources, 'nodejs');
mockBuilds = sampleBuilds.data;
mockBuildConfigs = sampleBuildConfigs.data;
mockSecrets = sampleSecrets;
cleanUpWorkload(nodeModel.resource, false)
.then(() => {
const allArgs = spy.calls.allArgs();
const removedModels = allArgs.map((arg) => arg[0]);

expect(spy.calls.count()).toEqual(7);
expect(spy.calls.count()).toEqual(6);
expect(removedModels).toContain(DeploymentConfigModel);
expect(removedModels).toContain(ImageStreamModel);
expect(removedModels).toContain(ServiceModel);
expect(removedModels).toContain(RouteModel);
expect(removedModels).toContain(BuildConfigModel);
expect(removedModels.filter((model) => model.kind === 'Secret')).toHaveLength(2);
expect(removedModels.filter((model) => model.kind === 'Secret')).toHaveLength(1);
done();
})
.catch((err) => fail(err));
Expand Down
24 changes: 12 additions & 12 deletions frontend/packages/topology/src/utils/application-utils.ts
Expand Up @@ -136,31 +136,31 @@ const safeKill = async (model: K8sKind, obj: K8sResourceKind) => {
return null;
};

const deleteWebhooks = (
const deleteWebhooks = async (
resource: K8sResourceKind,
buildConfigs: K8sResourceKind[],
isKnativeResource: boolean,
) => {
const deploymentsAnnotations = resource.metadata?.annotations ?? {};
const gitType = detectGitType(deploymentsAnnotations['app.openshift.io/vcs-uri']);
const secretList = await k8sList(SecretModel, {
ns: resource.metadata.namespace,
});
return buildConfigs?.reduce((requests, bc) => {
const triggers = bc.spec?.triggers ?? [];
const reqs = triggers.reduce((a, t) => {
let obj: K8sResourceKind;
let secretResource: K8sResourceKind;
const webhookType = t.generic ? 'generic' : gitType;
const webhookTypeObj = t.generic || (!isKnativeResource && t[gitType]);
if (webhookTypeObj) {
obj = {
...resource,
metadata: {
name:
webhookTypeObj.secretReference?.name ??
`${resource.metadata.name}-${webhookType}-webhook-secret`,
namespace: resource.metadata.namespace,
},
};
const secretName =
webhookTypeObj.secretReference?.name ??
`${resource.metadata.name}-${webhookType}-webhook-secret`;
secretResource = secretList.find(
(secret: K8sResourceKind) => secret.metadata.name === secretName,
);
}
return obj ? [...a, safeKill(SecretModel, obj)] : a;
return secretResource ? [...a, safeKill(SecretModel, secretResource)] : a;
}, []);
return [...requests, ...reqs];
}, []);
Expand Down

0 comments on commit d796ceb

Please sign in to comment.