mirror of
https://github.com/portainer/portainer.git
synced 2025-08-01 20:05:23 +02:00
feat(kubernetes/summary): summary of k8s actions upon deploying/updating resources EE-436 (#5137)
* feat EE-440/EE-436 kubernetes-resources-summary-panel * bugfix: returning created resources after update * fixed patch based bugs - displaying accurate updates for k8s resources Co-authored-by: Simon Meng <simon.meng@portainer.io>
This commit is contained in:
parent
267968e099
commit
eae2f5c9fc
16 changed files with 539 additions and 7 deletions
54
app/kubernetes/views/summary/resources/helpers.js
Normal file
54
app/kubernetes/views/summary/resources/helpers.js
Normal file
|
@ -0,0 +1,54 @@
|
|||
import _ from 'lodash-es';
|
||||
import * as JsonPatch from 'fast-json-patch';
|
||||
import { KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';
|
||||
|
||||
function findCreateResources(newResources, oldResources) {
|
||||
return _.differenceBy(newResources, oldResources, 'Name');
|
||||
}
|
||||
|
||||
function findDeleteResources(newResources, oldResources) {
|
||||
return _.differenceBy(oldResources, newResources, 'Name');
|
||||
}
|
||||
|
||||
function findUpdateResources(newResources, oldResources) {
|
||||
const updateResources = _.intersectionWith(newResources, oldResources, (newResource, oldResource) => {
|
||||
// find out resources with same name but content changed
|
||||
if (newResource.Name != oldResource.Name) {
|
||||
return false;
|
||||
}
|
||||
return !isEqual(newResource, oldResource);
|
||||
});
|
||||
|
||||
return updateResources;
|
||||
}
|
||||
|
||||
function isEqual(newResource, oldResource) {
|
||||
let patches = JsonPatch.compare(newResource, oldResource);
|
||||
patches = _.filter(patches, (change) => {
|
||||
return !_.includes(change.path, '$$hashKey') && !_.includes(change.path, 'Duplicate');
|
||||
});
|
||||
|
||||
return !patches.length;
|
||||
}
|
||||
|
||||
function doGetResourcesSummary(newResources, oldResources, kind, action, actionFilter) {
|
||||
const filteredResources = actionFilter(newResources, oldResources);
|
||||
const summary = filteredResources.map((resource) => ({ name: resource.Name, action, kind }));
|
||||
|
||||
return summary;
|
||||
}
|
||||
|
||||
export function getResourcesSummary(newResources, oldResources, kind) {
|
||||
if (!Array.isArray(newResources)) {
|
||||
newResources = newResources ? [newResources] : [];
|
||||
oldResources = oldResources ? [oldResources] : [];
|
||||
}
|
||||
|
||||
const summary = [
|
||||
...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.CREATE, findCreateResources),
|
||||
...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.UPDATE, findUpdateResources),
|
||||
...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.DELETE, findDeleteResources),
|
||||
];
|
||||
|
||||
return summary;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue