Task Description
Create a new admin page at /admin/exposed-services to list all services exposed by plugins. Uses label selector greenhouse.sap/plugin-exposed-services=true for efficient API-level filtering.
Sub-tasks
Implementation Details
In order to fetch all services exposed by all plugins following method can be used.
/*
* SPDX-FileCopyrightText: 2026 SAP SE or an SAP affiliate company and Juno contributors
* SPDX-License-Identifier: Apache-2.0
*/
import { Plugin } from "../../types/k8sTypes"
export const FETCH_EXPOSED_SERVICES_CACHE_KEY = "exposedServices"
export const fetchExposedServices = async ({
apiClient,
namespace,
}: {
apiClient: any
namespace: string
}): Promise<Plugin[]> => {
// Filter only by plugins that have exposed services
const labelSelector = "greenhouse.sap/plugin-exposed-services=true"
const response = await apiClient.get(`/apis/greenhouse.sap/v1alpha1/namespaces/${namespace}/plugins`, {
params: {
labelSelector,
},
})
return Array.isArray(response?.items) ? response.items : []
}
Related Issues
Additional Context
Please follow established Greenhouse admin patterns with React Query, DataGrid components, and proper error handling.
Task Description
Create a new admin page at
/admin/exposed-servicesto list all services exposed by plugins. Uses label selectorgreenhouse.sap/plugin-exposed-services=truefor efficient API-level filtering.Sub-tasks
/admin/exposed-services/Implementation Details
In order to fetch all services exposed by all plugins following method can be used.
Related Issues
Additional Context
Please follow established Greenhouse admin patterns with React Query, DataGrid components, and proper error handling.