Skip to content

Commit

Permalink
Show different operator instances from same CSV separately in topology
Browse files Browse the repository at this point in the history
  • Loading branch information
jeff-phillips-18 committed Sep 16, 2020
1 parent b6ffd5a commit 280171a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ const highlightNode = (monitor: DropTargetMonitor, element: Node): boolean => {
if (operation.type === CREATE_CONNECTOR_OPERATION) {
return (
monitor.getItem() !== element &&
monitor.getItem().getParent() !== element &&
!monitor
.getItem()
.getSourceEdges()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,31 +171,40 @@ export class ExtensibleModel {
const getters = this.dataModelGetters;
const depicters = this.dataModelDepicters;
const workloadResources = this.getWorkloadResources(resources);
const promises = getters?.length ? getters : [Promise.resolve];
const promises = getters?.length
? getters.map((getter) => getter(this.namespace, resources, workloadResources))
: [Promise.resolve(null)];

const topologyModel: Model = {
nodes: [],
edges: [],
};

const addToModel = async (promise: any): Promise<Model> => {
const model = await promise(this.namespace, resources, workloadResources);
addToTopologyDataModel(model, topologyModel, depicters);
return topologyModel;
};

for (const i in promises) {
if (promises[i]) {
// eslint-disable-next-line no-await-in-loop
await addToModel(promises[i]);
}
}
await Promise.all(promises).then((models) => {
models.forEach((model) => {
if (model) {
try {
addToTopologyDataModel(model, topologyModel, depicters);
} catch (e) {
// eslint-disable-next-line no-console
console.error('Unable to add some resources to topology', e);
}
}
});
});

return Promise.resolve(topologyModel);
};

public reconcileModel = (model: Model, resources: TopologyDataResources): void => {
this.dataModelReconcilers.forEach((reconciler) => reconciler(model, resources));
this.dataModelReconcilers.forEach((reconciler) => {
try {
reconciler(model, resources);
} catch (e) {
// eslint-disable-next-line no-console
console.error('Unable to reconcile some resources in topology', e);
}
});
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,28 +60,36 @@ export const operatorsDataModelReconciler = (
installedOperators.forEach((csv) => {
const crds = csv?.spec?.customresourcedefinitions?.owned ?? [];
const crdKinds = crds.map((crd) => crd.kind);
const operatorNodes = model.nodes.filter((node: OdcNodeModel) => {
const operatorGroupNodes = model.nodes.reduce((groupNodes, node: OdcNodeModel) => {
const { resource } = node;
if (!resource) {
return groupNodes;
}

// Hide operator backed if belong to source
if (resources && isOperatorBackedKnResource(resource, resources)) {
return false;
return groupNodes;
}

const owner = resource?.metadata?.ownerReferences?.[0];
if (!owner) {
return false;
return groupNodes;
}

const nodeOwnerKind = owner.kind;
const nodeOwnerId = owner.uid;
return nodeOwnerId === csv.metadata.uid || crdKinds.includes(nodeOwnerKind);
});
if (nodeOwnerId === csv.metadata.uid || crdKinds.includes(nodeOwnerKind)) {
const key = resource?.metadata?.ownerReferences?.[0].name;
if (!groupNodes[key]) {
groupNodes[key] = [];
}
groupNodes[key].push(node);
}
return groupNodes;
}, {});

if (operatorNodes.length) {
// TODO: https://issues.redhat.com/browse/ODC-4730
// Here we should be creating different operator groups based on the ownerReference data from
// each node, it has the correct UID, kind, and name.
Object.keys(operatorGroupNodes).forEach((key) => {
const operatorNodes = operatorGroupNodes[key];

const baseNode = operatorNodes[0] as OdcNodeModel;
const operatorGroupItem = getOperatorGroupResource(baseNode.resource, resources);
Expand Down Expand Up @@ -140,6 +148,6 @@ export const operatorsDataModelReconciler = (
);
model.nodes.push(obsNode);
}
}
});
});
};

0 comments on commit 280171a

Please sign in to comment.