diff --git a/src/common/front-end-routing/routes/cluster/config/config-maps/config-maps-route.injectable.ts b/src/common/front-end-routing/routes/cluster/config/config-maps/config-maps-route.injectable.ts index 6ea03fff08..0ad7ed3d88 100644 --- a/src/common/front-end-routing/routes/cluster/config/config-maps/config-maps-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/config/config-maps/config-maps-route.injectable.ts @@ -13,7 +13,7 @@ const configMapsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "configmaps", - group: "v1", + group: "", }), }), injectionToken: frontEndRouteInjectionToken, diff --git a/src/common/front-end-routing/routes/cluster/config/limit-ranges/limit-ranges-route.injectable.ts b/src/common/front-end-routing/routes/cluster/config/limit-ranges/limit-ranges-route.injectable.ts index 8623f3520e..0536e76004 100644 --- a/src/common/front-end-routing/routes/cluster/config/limit-ranges/limit-ranges-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/config/limit-ranges/limit-ranges-route.injectable.ts @@ -14,7 +14,7 @@ const limitRangesRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "limitranges", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/config/resource-quotas/resource-quotas-route.injectable.ts b/src/common/front-end-routing/routes/cluster/config/resource-quotas/resource-quotas-route.injectable.ts index 209f77e19a..4905b70890 100644 --- a/src/common/front-end-routing/routes/cluster/config/resource-quotas/resource-quotas-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/config/resource-quotas/resource-quotas-route.injectable.ts @@ -14,7 +14,7 @@ const resourceQuotasRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "resourcequotas", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/config/secrets/secrets-route.injectable.ts b/src/common/front-end-routing/routes/cluster/config/secrets/secrets-route.injectable.ts index 079ddcbf83..7442de14b1 100644 --- a/src/common/front-end-routing/routes/cluster/config/secrets/secrets-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/config/secrets/secrets-route.injectable.ts @@ -14,7 +14,7 @@ const secretsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "secrets", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/events/events-route.injectable.ts b/src/common/front-end-routing/routes/cluster/events/events-route.injectable.ts index b3df358ad8..728f80c21d 100644 --- a/src/common/front-end-routing/routes/cluster/events/events-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/events/events-route.injectable.ts @@ -14,7 +14,7 @@ const eventsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "events", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/namespaces/namespaces-route.injectable.ts b/src/common/front-end-routing/routes/cluster/namespaces/namespaces-route.injectable.ts index 2aa6c23efe..0b57c8d573 100644 --- a/src/common/front-end-routing/routes/cluster/namespaces/namespaces-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/namespaces/namespaces-route.injectable.ts @@ -14,7 +14,7 @@ const namespacesRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "namespaces", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/network/endpoints/endpoints-route.injectable.ts b/src/common/front-end-routing/routes/cluster/network/endpoints/endpoints-route.injectable.ts index c88ec04714..50b3c72e4c 100644 --- a/src/common/front-end-routing/routes/cluster/network/endpoints/endpoints-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/network/endpoints/endpoints-route.injectable.ts @@ -14,7 +14,7 @@ const endpointsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "endpoints", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/network/services/services-route.injectable.ts b/src/common/front-end-routing/routes/cluster/network/services/services-route.injectable.ts index 53300ee241..223ded1e65 100644 --- a/src/common/front-end-routing/routes/cluster/network/services/services-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/network/services/services-route.injectable.ts @@ -14,7 +14,7 @@ const servicesRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "services", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/nodes/nodes-route.injectable.ts b/src/common/front-end-routing/routes/cluster/nodes/nodes-route.injectable.ts index 81323843d5..e6ca61346e 100644 --- a/src/common/front-end-routing/routes/cluster/nodes/nodes-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/nodes/nodes-route.injectable.ts @@ -14,7 +14,7 @@ const nodesRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "nodes", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/overview/cluster-overview-route.injectable.ts b/src/common/front-end-routing/routes/cluster/overview/cluster-overview-route.injectable.ts index 8315fd7773..e559c35079 100644 --- a/src/common/front-end-routing/routes/cluster/overview/cluster-overview-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/overview/cluster-overview-route.injectable.ts @@ -14,7 +14,7 @@ const clusterOverviewRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "nodes", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/storage/persistent-volume-claims/persistent-volume-claims-route.injectable.ts b/src/common/front-end-routing/routes/cluster/storage/persistent-volume-claims/persistent-volume-claims-route.injectable.ts index 1b96933136..dbda527555 100644 --- a/src/common/front-end-routing/routes/cluster/storage/persistent-volume-claims/persistent-volume-claims-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/storage/persistent-volume-claims/persistent-volume-claims-route.injectable.ts @@ -14,7 +14,7 @@ const persistentVolumeClaimsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "persistentvolumeclaims", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/storage/persistent-volumes/persistent-volumes-route.injectable.ts b/src/common/front-end-routing/routes/cluster/storage/persistent-volumes/persistent-volumes-route.injectable.ts index 52f95b32c6..7a06d9df58 100644 --- a/src/common/front-end-routing/routes/cluster/storage/persistent-volumes/persistent-volumes-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/storage/persistent-volumes/persistent-volumes-route.injectable.ts @@ -14,7 +14,7 @@ const persistentVolumesRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "persistentvolumes", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/user-management/service-accounts/service-accounts-route.injectable.ts b/src/common/front-end-routing/routes/cluster/user-management/service-accounts/service-accounts-route.injectable.ts index 3bf6c1ec00..65d02135c7 100644 --- a/src/common/front-end-routing/routes/cluster/user-management/service-accounts/service-accounts-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/user-management/service-accounts/service-accounts-route.injectable.ts @@ -14,7 +14,7 @@ const serviceAccountsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "serviceaccounts", - group: "v1", + group: "", }), }), diff --git a/src/common/front-end-routing/routes/cluster/workloads/pods/pods-route.injectable.ts b/src/common/front-end-routing/routes/cluster/workloads/pods/pods-route.injectable.ts index 577f1c1a91..d013f872f0 100644 --- a/src/common/front-end-routing/routes/cluster/workloads/pods/pods-route.injectable.ts +++ b/src/common/front-end-routing/routes/cluster/workloads/pods/pods-route.injectable.ts @@ -14,7 +14,7 @@ const podsRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "pods", - group: "v1", + group: "", }), }), diff --git a/src/common/rbac.ts b/src/common/rbac.ts index 39edc49b60..40b9f2c43c 100644 --- a/src/common/rbac.ts +++ b/src/common/rbac.ts @@ -13,17 +13,21 @@ export type KubeResource = export interface KubeApiResource { kind: string; - group: string; + group: string; // api-group, if empty then "core" apiName: string; namespaced: boolean; } export interface KubeApiResourceDescriptor { apiName: string; - group: string; + group: string; // api-group, if empty then "core" } -export const formatKubeApiResource = (res: KubeApiResourceDescriptor) => `${res.group}/${res.apiName}`; +export const formatKubeApiResource = (desc: KubeApiResourceDescriptor) => ( + desc.group + ? `${desc.group}/${desc.apiName}` + : desc.apiName +); export interface KubeApiResourceData { kind: string; // resource type (e.g. "Namespace") @@ -44,7 +48,7 @@ export const apiResourceRecord: Record = { }, configmaps: { kind: "ConfigMap", - group: "v1", + group: "", namespaced: true, }, cronjobs: { @@ -69,12 +73,12 @@ export const apiResourceRecord: Record = { }, endpoints: { kind: "Endpoint", - group: "v1", + group: "", namespaced: true, }, events: { kind: "Event", - group: "v1", + group: "", namespaced: true, }, horizontalpodautoscalers: { @@ -99,17 +103,17 @@ export const apiResourceRecord: Record = { }, namespaces: { kind: "Namespace", - group: "v1", + group: "", namespaced: false, }, limitranges: { kind: "LimitRange", - group: "v1", + group: "", namespaced: true, }, leases: { kind: "Lease", - group: "v1", + group: "", namespaced: true, }, networkpolicies: { @@ -119,22 +123,22 @@ export const apiResourceRecord: Record = { }, nodes: { kind: "Node", - group: "v1", + group: "", namespaced: false, }, persistentvolumes: { kind: "PersistentVolume", - group: "v1", + group: "", namespaced: false, }, persistentvolumeclaims: { kind: "PersistentVolumeClaim", - group: "v1", + group: "", namespaced: true, }, pods: { kind: "Pod", - group: "v1", + group: "", namespaced: true, }, poddisruptionbudgets: { @@ -159,7 +163,7 @@ export const apiResourceRecord: Record = { }, resourcequotas: { kind: "ResourceQuota", - group: "v1", + group: "", namespaced: true, }, replicasets: { @@ -179,17 +183,17 @@ export const apiResourceRecord: Record = { }, secrets: { kind: "Secret", - group: "v1", + group: "", namespaced: true, }, serviceaccounts: { kind: "ServiceAccount", - group: "v1", + group: "", namespaced: true, }, services: { kind: "Service", - group: "v1", + group: "", namespaced: true, }, statefulsets: { diff --git a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx index a3761caf21..c6102f3f24 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx @@ -66,7 +66,7 @@ describe("cluster/namespaces - edit namespace from new tab", () => { builder.allowKubeResource({ apiName: "namespaces", - group: "v1", + group: "", }); }); diff --git a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx index 0d49469951..c5bbd15dfc 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx @@ -37,7 +37,7 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () = builder.allowKubeResource({ apiName: "namespaces", - group: "v1", + group: "", }); }); diff --git a/src/features/cluster/visibility-of-sidebar-items.test.tsx b/src/features/cluster/visibility-of-sidebar-items.test.tsx index 2eb42b7fdf..8fd68044a6 100644 --- a/src/features/cluster/visibility-of-sidebar-items.test.tsx +++ b/src/features/cluster/visibility-of-sidebar-items.test.tsx @@ -52,7 +52,7 @@ describe("cluster - visibility of sidebar items", () => { beforeEach(() => { builder.allowKubeResource({ apiName: "namespaces", - group: "v1", + group: "", }); }); @@ -77,7 +77,7 @@ const testRouteInjectable = getInjectable({ clusterFrame: true, isEnabled: di.inject(shouldShowResourceInjectionToken, { apiName: "namespaces", - group: "v1", + group: "", }), }), diff --git a/src/features/cluster/workload-overview.test.tsx b/src/features/cluster/workload-overview.test.tsx index 205c837b47..725ec04e90 100644 --- a/src/features/cluster/workload-overview.test.tsx +++ b/src/features/cluster/workload-overview.test.tsx @@ -15,7 +15,7 @@ describe("workload overview", () => { applicationBuilder = getApplicationBuilder().setEnvironmentToClusterFrame(); applicationBuilder.allowKubeResource({ apiName: "pods", - group: "v1", + group: "", }); rendered = await applicationBuilder.render(); }); diff --git a/src/main/cluster/request-core-api-versions.injectable.ts b/src/main/cluster/request-core-api-versions.injectable.ts index e92def914e..4287eb4d3b 100644 --- a/src/main/cluster/request-core-api-versions.injectable.ts +++ b/src/main/cluster/request-core-api-versions.injectable.ts @@ -16,7 +16,7 @@ const requestCoreApiVersionsInjectable = getInjectable({ const { versions } = await k8sRequest(cluster, "/api") as V1APIVersions; return versions.map(version => ({ - group: version, + group: "", path: `/api/${version}`, })); }; diff --git a/src/renderer/components/+workloads-overview/workloads/implementations/pods-workload.injectable.ts b/src/renderer/components/+workloads-overview/workloads/implementations/pods-workload.injectable.ts index 452f7903aa..246469b9e7 100644 --- a/src/renderer/components/+workloads-overview/workloads/implementations/pods-workload.injectable.ts +++ b/src/renderer/components/+workloads-overview/workloads/implementations/pods-workload.injectable.ts @@ -21,7 +21,7 @@ const podsWorkloadInjectable = getInjectable({ return { resource: { apiName: "pods", - group: "v1", + group: "", }, open: navigate, diff --git a/src/renderer/frames/cluster-frame/cluster-frame.test.tsx b/src/renderer/frames/cluster-frame/cluster-frame.test.tsx index 1a4cc82248..c403ad6b49 100644 --- a/src/renderer/frames/cluster-frame/cluster-frame.test.tsx +++ b/src/renderer/frames/cluster-frame/cluster-frame.test.tsx @@ -69,7 +69,7 @@ describe("", () => { describe("given cluster with list nodes and namespaces permissions", () => { beforeEach(() => { // TODO: replace with not using private info - (cluster as any).allowedResources.replace(["v1/nodes", "v1/namespaces"]); + (cluster as unknown as { readonly allowedResources: Cluster["allowedResources"] }).allowedResources.replace(["nodes", "namespaces"]); }); it("renders", () => { @@ -110,7 +110,7 @@ describe("", () => { describe("given cluster without list nodes, but with namespaces permissions", () => { beforeEach(() => { - (cluster as any).allowedResources.replace(["v1/namespaces"]); + (cluster as unknown as { readonly allowedResources: Cluster["allowedResources"] }).allowedResources.replace(["namespaces"]); }); it("renders", () => { diff --git a/src/renderer/initializers/workload-events.tsx b/src/renderer/initializers/workload-events.tsx index 735b4e2c74..73251382c8 100644 --- a/src/renderer/initializers/workload-events.tsx +++ b/src/renderer/initializers/workload-events.tsx @@ -34,7 +34,7 @@ export const WorkloadEvents = withInjectables getProps: (di, props) => ({ workloadEventsAreAllowed: di.inject(shouldShowResourceInjectionToken, { apiName: "events", - group: "v1", + group: "", }), ...props, }),