Skip to content

Commit

Permalink
update delete webhooks logic
Browse files Browse the repository at this point in the history
update
  • Loading branch information
sahil143 committed May 27, 2020
1 parent 7ee0223 commit c5def17
Showing 1 changed file with 55 additions and 38 deletions.
93 changes: 55 additions & 38 deletions frontend/packages/dev-console/src/utils/application-utils.ts
Expand Up @@ -34,7 +34,6 @@ import { getOperatorBackedServiceKindMap } from '@console/shared';
import { CREATE_APPLICATION_KEY, UNASSIGNED_KEY } from '../const';
import { TopologyDataObject, ConnectsToData } from '../components/topology/topology-types';
import { detectGitType } from '../components/import/import-validation-utils';
import { GitTypes } from '../components/import/import-types';
import { ServiceBindingRequestModel } from '../models';

export const sanitizeApplicationValue = (
Expand Down Expand Up @@ -406,13 +405,65 @@ export const removeResourceConnection = (
});
};

const safeKill = async (model: K8sKind, obj: K8sResourceKind) => {
const resp = await checkAccess({
group: model.apiGroup,
resource: model.plural,
verb: 'delete',
name: obj.metadata.name,
namespace: obj.metadata.namespace,
});
if (resp.status.allowed) {
return k8sKill(model, obj);
}
return null;
};

const deleteWebhooks = (
resource: K8sResourceKind,
workload: TopologyDataObject<{ isKnativeResource?: boolean }>,
) => {
const isKnativeResource = workload?.data?.isKnativeResource ?? false;
const deploymentsAnnotations = resource.metadata?.annotations ?? {};
const gitType = detectGitType(deploymentsAnnotations['app.openshift.io/vcs-uri']);
const buildConfigs = workload?.resources?.buildConfigs;
return buildConfigs?.reduce((requests, bc) => {
const triggers = bc?.spec?.triggers;
const reqs = triggers?.reduce((a, t) => {
let obj: K8sResourceKind;
if (t?.generic) {
obj = {
...resource,
metadata: {
name:
t?.generic?.secretReference?.name ??
`${resource.metadata.name}-generic-webhook-secret`,
namespace: resource.metadata.namespace,
},
};
}
if (t?.[gitType] && !isKnativeResource) {
obj = {
...resource,
metadata: {
name:
t?.[gitType]?.secretReference?.name ??
`${resource.metadata.name}-${gitType}-webhook-secret`,
namespace: resource.metadata.namespace,
},
};
}
return obj ? [...a, safeKill(SecretModel, obj)] : a;
}, []);
return [...requests, ...reqs];
}, []);
};

export const cleanUpWorkload = (
resource: K8sResourceKind,
workload: TopologyDataObject,
): Promise<K8sResourceKind[]> => {
const reqs = [];
const webhooks = [];
let webhooksAvailable = false;
const isBuildConfigPresent = !_.isEmpty(workload?.resources?.buildConfigs);

const deleteModels = [ServiceModel, RouteModel];
Expand All @@ -421,24 +472,7 @@ export const cleanUpWorkload = (
deleteModels.push(BuildConfigModel);
knativeDeleteModels.push(BuildConfigModel);
}

const deploymentsAnnotations = _.get(resource, 'metadata.annotations', {});
const isKnativeResource = _.get(workload, 'data.isKnativeResource', false);
const gitType = detectGitType(deploymentsAnnotations['app.openshift.io/vcs-uri']);
const resourceData = _.cloneDeep(resource);
const safeKill = async (model: K8sKind, obj: K8sResourceKind) => {
const resp = await checkAccess({
group: model.apiGroup,
resource: model.plural,
verb: 'delete',
name: obj.metadata.name,
namespace: obj.metadata.namespace,
});
if (resp.status.allowed) {
return k8sKill(model, obj);
}
return null;
};
const deleteRequest = (model: K8sKind, resourceObj: K8sResourceKind) => {
const req = safeKill(model, resourceObj);
req && reqs.push(req);
Expand All @@ -458,31 +492,14 @@ export const cleanUpWorkload = (
deleteRequest(modelFor(resource.kind), resource);
batchDeleteRequests(deleteModels, resource);
deleteRequest(ImageStreamModel, resource); // delete imageStream
isBuildConfigPresent ? (webhooksAvailable = true) : (webhooksAvailable = false);
break;
case KnativeServiceModel.kind:
batchDeleteRequests(knativeDeleteModels, resourceData);
isBuildConfigPresent ? (webhooksAvailable = true) : (webhooksAvailable = false);
break;
default:
break;
}
if (webhooksAvailable) {
webhooks.push('generic');
if (!isKnativeResource && gitType !== GitTypes.unsure) {
webhooks.push(gitType);
}
}
webhooks.forEach((hookName) => {
const obj = {
...resource,
metadata: {
name: `${resourceData.metadata.name}-${hookName}-webhook-secret`,
namespace: resourceData.metadata.namespace,
},
};
deleteRequest(SecretModel, obj);
});
isBuildConfigPresent && reqs.push(...deleteWebhooks(resource, workload));
return Promise.all(reqs);
};

Expand Down

0 comments on commit c5def17

Please sign in to comment.