Extended Argoworkflows plugin to search workflows across namespaces and specific ns

Signed-off-by: Mani Marothu <manikumar.1215@gmail.com>
This commit is contained in:
Mani Marothu 2024-09-16 16:41:39 -07:00
parent 276134cdf9
commit 9a96c90b41
2 changed files with 33 additions and 32 deletions

View file

@ -1,33 +1,31 @@
import {Entity} from "@backstage/catalog-model";
import { Entity } from '@backstage/catalog-model';
import {
ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION,
CLUSTER_NAME_ANNOTATION,
K8S_NAMESPACE_ANNOTATION,
} from "../plugin";
ARGO_WORKFLOWS_NAMESPACE_ANNOTATION,
} from '../plugin';
export function trimBaseUrl(argoWorkflowsBaseUrl: string | undefined) {
if (argoWorkflowsBaseUrl && argoWorkflowsBaseUrl.endsWith("/")) {
if (argoWorkflowsBaseUrl && argoWorkflowsBaseUrl.endsWith('/')) {
return argoWorkflowsBaseUrl.substring(0, argoWorkflowsBaseUrl.length - 1);
}
return argoWorkflowsBaseUrl;
}
export type getAnnotationValuesOutput = {
ns: string;
ns?: string;
clusterName?: string;
labelSelector?: string;
};
export function getAnnotationValues(entity: Entity): getAnnotationValuesOutput {
const ns =
entity.metadata.annotations?.[K8S_NAMESPACE_ANNOTATION] !== undefined
? entity.metadata.annotations?.[K8S_NAMESPACE_ANNOTATION]
: "default";
const ns = entity.metadata.annotations?.[ARGO_WORKFLOWS_NAMESPACE_ANNOTATION];
const clusterName = entity.metadata.annotations?.[CLUSTER_NAME_ANNOTATION];
const labelSelector = entity.metadata?.annotations?.[ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION]
const labelSelector =
entity.metadata?.annotations?.[ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION];
return {
ns: ns,
clusterName: clusterName,
labelSelector: labelSelector,
};
}
}

View file

@ -4,20 +4,21 @@ import {
createRoutableExtension,
discoveryApiRef,
fetchApiRef,
} from "@backstage/core-plugin-api";
import {Entity} from "@backstage/catalog-model";
} from '@backstage/core-plugin-api';
import { Entity } from '@backstage/catalog-model';
import {rootRouteRef} from "./routes";
import {ArgoWorkflows, argoWorkflowsApiRef} from "./api";
import {kubernetesApiRef} from "@backstage/plugin-kubernetes";
import { rootRouteRef } from './routes';
import { ArgoWorkflows, argoWorkflowsApiRef } from './api';
import { kubernetesApiRef } from '@backstage/plugin-kubernetes';
export const CLUSTER_NAME_ANNOTATION = "argo-workflows.cnoe.io/cluster-name";
export const K8S_NAMESPACE_ANNOTATION = "backstage.io/kubernetes-namespace";
export const CLUSTER_NAME_ANNOTATION = 'argo-workflows.cnoe.io/cluster-name';
export const ARGO_WORKFLOWS_NAMESPACE_ANNOTATION =
'argo-workflows.cnoe.io/namespace';
export const ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION =
"argo-workflows.cnoe.io/label-selector";
'argo-workflows.cnoe.io/label-selector';
export const argoWorkflowsPlugin = createPlugin({
id: "argo-workflows",
id: 'argo-workflows',
routes: {
root: rootRouteRef,
},
@ -29,7 +30,7 @@ export const argoWorkflowsPlugin = createPlugin({
kubernetesApi: kubernetesApiRef,
fetchApi: fetchApiRef,
},
factory: ({discoveryApi, kubernetesApi, fetchApi}) =>
factory: ({ discoveryApi, kubernetesApi, fetchApi }) =>
new ArgoWorkflows(discoveryApi, kubernetesApi, fetchApi),
}),
],
@ -37,33 +38,35 @@ export const argoWorkflowsPlugin = createPlugin({
export const ArgoWorkflowsPage = argoWorkflowsPlugin.provide(
createRoutableExtension({
name: "ArgoWorkflowsPage",
name: 'ArgoWorkflowsPage',
component: () =>
import("./components/Overview").then((m) => m.ArgoWorkflowsOverviewPage),
import('./components/Overview').then(m => m.ArgoWorkflowsOverviewPage),
mountPoint: rootRouteRef,
})
}),
);
export const EntityArgoWorkflowsOverviewCard = argoWorkflowsPlugin.provide(
createRoutableExtension({
name: "ArgoWorkflowsOverviewCard",
name: 'ArgoWorkflowsOverviewCard',
component: () =>
import("./components/Overview").then((m) => m.ArgoWorkflowsOverviewCard),
import('./components/Overview').then(m => m.ArgoWorkflowsOverviewCard),
mountPoint: rootRouteRef,
})
}),
);
export const EntityArgoWorkflowsTemplateOverviewCard =
argoWorkflowsPlugin.provide(
createRoutableExtension({
name: "ArgoWorkflowsTemplatesOverviewCard",
name: 'ArgoWorkflowsTemplatesOverviewCard',
component: () =>
import("./components/Overview").then(
(m) => m.ArgoWorkflowsTemplatesOverviewCard
import('./components/Overview').then(
m => m.ArgoWorkflowsTemplatesOverviewCard,
),
mountPoint: rootRouteRef,
})
}),
);
export const isArgoWorkflowsAvailable = (entity: Entity) =>
Boolean(entity?.metadata.annotations?.[ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION]);
Boolean(
entity?.metadata.annotations?.[ARGO_WORKFLOWS_LABEL_SELECTOR_ANNOTATION],
);