@@ -94,7 +94,10 @@ function getIngressPathsForAppServices(
}
const matchingIngressesPaths = ingresses.flatMap((ingress) => {
// for each ingress get an array of ingress paths that match the app services
- const matchingIngressPaths = ingress.Paths.filter((path) =>
+ if (!ingress.Paths) {
+ return [];
+ }
+ const matchingIngressPaths = ingress.Paths?.filter((path) =>
services?.some((service) => {
const servicePorts = service.spec?.ports?.map((port) => port.port);
// include the ingress if the ingress path has a matching service name and port
diff --git a/app/react/kubernetes/ingresses/IngressDatatable/columns/ingressRules.tsx b/app/react/kubernetes/ingresses/IngressDatatable/columns/ingressRules.tsx
index bc30727ec..7d145e27a 100644
--- a/app/react/kubernetes/ingresses/IngressDatatable/columns/ingressRules.tsx
+++ b/app/react/kubernetes/ingresses/IngressDatatable/columns/ingressRules.tsx
@@ -11,7 +11,7 @@ import { columnHelper } from './helper';
export const ingressRules = columnHelper.accessor(
({ Paths, TLS }) =>
// return an accessor function with all the useful text to search for
- Paths.map((path) => {
+ Paths?.map((path) => {
const isHttp = isHTTP(TLS || [], path.Host);
return `${isHttp ? 'http' : 'https'}://${path.Host}${path.Path}${
path.ServiceName
diff --git a/app/react/kubernetes/ingresses/queries.ts b/app/react/kubernetes/ingresses/queries.ts
index c6b26fa72..d532968ac 100644
--- a/app/react/kubernetes/ingresses/queries.ts
+++ b/app/react/kubernetes/ingresses/queries.ts
@@ -92,25 +92,27 @@ export function useIngresses(
.flat();
// check if each ingress path service has a service that still exists
- filteredIngresses.forEach((ing, iIndex) => {
- const servicesInNamespace = services?.filter(
- (service) => service?.Namespace === ing?.Namespace
- );
- const serviceNamesInNamespace = servicesInNamespace?.map(
- (service) => service.Name
- );
- ing.Paths?.forEach((path, pIndex) => {
- if (
- !serviceNamesInNamespace?.includes(path.ServiceName) &&
- filteredIngresses[iIndex].Paths
- ) {
- filteredIngresses[iIndex].Paths[pIndex].HasService = false;
- } else {
- filteredIngresses[iIndex].Paths[pIndex].HasService = true;
- }
- });
- });
- return filteredIngresses;
+ const updatedFilteredIngresses: Ingress[] = filteredIngresses.map(
+ (ing) => {
+ const servicesInNamespace = services?.filter(
+ (service) => service?.Namespace === ing?.Namespace
+ );
+ const serviceNamesInNamespace = servicesInNamespace?.map(
+ (service) => service.Name
+ );
+
+ const updatedPaths =
+ ing.Paths?.map((path) => {
+ const hasService = serviceNamesInNamespace?.includes(
+ path.ServiceName
+ );
+ return { ...path, HasService: hasService };
+ }) || null;
+
+ return { ...ing, Paths: updatedPaths };
+ }
+ );
+ return updatedFilteredIngresses;
},
{
enabled: !!namespaces?.length,
@@ -175,7 +177,7 @@ export function useDeleteIngresses() {
*/
export function useIngressControllers(
environmentId: EnvironmentId,
- namespace: string
+ namespace?: string
) {
return useQuery(
[
@@ -186,10 +188,8 @@ export function useIngressControllers(
namespace,
'ingresscontrollers',
],
- async () => {
- const ing = await getIngressControllers(environmentId, namespace);
- return ing;
- },
+ async () =>
+ namespace ? getIngressControllers(environmentId, namespace) : [],
{
enabled: !!namespace,
cacheTime: 0,
diff --git a/app/react/kubernetes/ingresses/types.ts b/app/react/kubernetes/ingresses/types.ts
index b064a35aa..48445dbc3 100644
--- a/app/react/kubernetes/ingresses/types.ts
+++ b/app/react/kubernetes/ingresses/types.ts
@@ -30,7 +30,7 @@ export type Ingress = {
ClassName: string;
Annotations?: Record;
Hosts?: string[];
- Paths: Path[];
+ Paths: Path[] | null;
TLS?: TLS[];
Type?: string;
Labels?: Record;
diff --git a/app/react/portainer/environments/.keep b/app/react/portainer/environments/.keep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/app/react/portainer/environments/types.ts b/app/react/portainer/environments/types.ts
index 34d59b180..eb3b5353e 100644
--- a/app/react/portainer/environments/types.ts
+++ b/app/react/portainer/environments/types.ts
@@ -64,6 +64,7 @@ export interface KubernetesConfiguration {
EnableResourceOverCommit?: boolean;
ResourceOverCommitPercentage?: number;
RestrictDefaultNamespace?: boolean;
+ RestrictStandardUserIngressW?: boolean;
IngressClasses: IngressClass[];
IngressAvailabilityPerNamespace: boolean;
AllowNoneIngressClass: boolean;
|