mirror of
https://github.com/portainer/portainer.git
synced 2025-07-24 07:49:41 +02:00
fix(kubeapi): fix ts api error handling [EE-5558] (#10488)
* fix(kubeapi): fix ts api error handling [EE-5558] * use portainer errors for mapped functions * don't parse long patch responses * allow nested kube error that's thrown to bubble up --------- Co-authored-by: testa113 <testa113>
This commit is contained in:
parent
6c55cac52a
commit
96ead31a8d
17 changed files with 210 additions and 234 deletions
|
@ -8,8 +8,7 @@ import {
|
|||
UpdateEnvironmentPayload,
|
||||
updateEnvironment,
|
||||
} from '@/react/portainer/environments/queries/useUpdateEnvironmentMutation';
|
||||
import axios from '@/portainer/services/axios';
|
||||
import { parseKubernetesAxiosError } from '@/react/kubernetes/axiosError';
|
||||
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||||
|
||||
import { updateIngressControllerClassMap } from '../../ingressClass/useIngressControllerClassMap';
|
||||
import { IngressControllerClassMap } from '../../ingressClass/types';
|
||||
|
@ -72,9 +71,6 @@ async function patchStorageClass(
|
|||
}
|
||||
);
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(
|
||||
e as Error,
|
||||
`Unable to patch StorageClass ${name}`
|
||||
);
|
||||
throw parseAxiosError(e, `Unable to patch StorageClass ${name}`);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,10 +65,7 @@ async function getStorageClasses(
|
|||
);
|
||||
return storageClassList.items;
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(
|
||||
e as Error,
|
||||
'Unable to retrieve Storage Classes'
|
||||
);
|
||||
throw parseKubernetesAxiosError(e, 'Unable to retrieve Storage Classes');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ import axios from '@/portainer/services/axios';
|
|||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
import { withError } from '@/react-tools/react-query';
|
||||
|
||||
import { parseKubernetesAxiosError } from '../../axiosError';
|
||||
|
||||
const queryKeys = {
|
||||
node: (environmentId: number, nodeName: string) => [
|
||||
'environments',
|
||||
|
@ -22,10 +24,14 @@ const queryKeys = {
|
|||
};
|
||||
|
||||
async function getNode(environmentId: EnvironmentId, nodeName: string) {
|
||||
const { data: node } = await axios.get<Node>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/nodes/${nodeName}`
|
||||
);
|
||||
return node;
|
||||
try {
|
||||
const { data: node } = await axios.get<Node>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/nodes/${nodeName}`
|
||||
);
|
||||
return node;
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(e, 'Unable to get node details');
|
||||
}
|
||||
}
|
||||
|
||||
export function useNodeQuery(environmentId: EnvironmentId, nodeName: string) {
|
||||
|
@ -33,20 +39,21 @@ export function useNodeQuery(environmentId: EnvironmentId, nodeName: string) {
|
|||
queryKeys.node(environmentId, nodeName),
|
||||
() => getNode(environmentId, nodeName),
|
||||
{
|
||||
...withError(
|
||||
'Unable to get node details from the Kubernetes api',
|
||||
'Failed to get node details'
|
||||
),
|
||||
...withError('Unable to get node details'),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// getNodes is used to get a list of nodes using the kubernetes API
|
||||
async function getNodes(environmentId: EnvironmentId) {
|
||||
const { data: nodeList } = await axios.get<NodeList>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/nodes`
|
||||
);
|
||||
return nodeList.items;
|
||||
try {
|
||||
const { data: nodeList } = await axios.get<NodeList>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/nodes`
|
||||
);
|
||||
return nodeList.items;
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(e, 'Unable to get nodes');
|
||||
}
|
||||
}
|
||||
|
||||
// useNodesQuery is used to get an array of nodes using the kubernetes API
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useQuery } from 'react-query';
|
||||
|
||||
import PortainerError from '@/portainer/error';
|
||||
import axios from '@/portainer/services/axios';
|
||||
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
import { withError } from '@/react-tools/react-query';
|
||||
|
||||
|
@ -23,6 +22,6 @@ export async function getIsRBACEnabled(environmentId: EnvironmentId) {
|
|||
);
|
||||
return data;
|
||||
} catch (e) {
|
||||
throw new PortainerError('Unable to check if RBAC is enabled.', e as Error);
|
||||
throw parseAxiosError(e, 'Unable to check if RBAC is enabled.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
import { IngressClassList } from 'kubernetes-types/networking/v1';
|
||||
|
||||
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||||
import axios from '@/portainer/services/axios';
|
||||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
|
||||
import { parseKubernetesAxiosError } from '../../axiosError';
|
||||
|
||||
export async function getAllIngressClasses(environmentId: EnvironmentId) {
|
||||
try {
|
||||
const {
|
||||
data: { items },
|
||||
} = await axios.get<IngressClassList>(urlBuilder(environmentId));
|
||||
return items;
|
||||
} catch (error) {
|
||||
throw parseAxiosError(error as Error);
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(e, 'Unable to retrieve ingress classes');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import { useQuery } from 'react-query';
|
||||
|
||||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
import PortainerError from '@/portainer/error';
|
||||
import axios from '@/portainer/services/axios';
|
||||
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||||
import { withError } from '@/react-tools/react-query';
|
||||
|
||||
import { IngressControllerClassMap } from './types';
|
||||
|
@ -61,7 +60,7 @@ export async function getIngressControllerClassMap({
|
|||
);
|
||||
return controllerMaps;
|
||||
} catch (e) {
|
||||
throw new PortainerError('Unable to get ingress controllers.', e as Error);
|
||||
throw parseAxiosError(e, 'Unable to get ingress controllers.');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,10 +76,7 @@ export async function updateIngressControllerClassMap(
|
|||
>(buildUrl(environmentId, namespace), ingressControllerClassMap);
|
||||
return controllerMaps;
|
||||
} catch (e) {
|
||||
throw new PortainerError(
|
||||
'Unable to update ingress controllers.',
|
||||
e as Error
|
||||
);
|
||||
throw parseAxiosError(e, 'Unable to update ingress controllers.');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,11 +5,17 @@ import axios from '@/portainer/services/axios';
|
|||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
import { withError } from '@/react-tools/react-query';
|
||||
|
||||
import { parseKubernetesAxiosError } from '../axiosError';
|
||||
|
||||
async function getKubernetesEndpoints(environmentId: EnvironmentId) {
|
||||
const { data: endpointsList } = await axios.get<EndpointsList>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/endpoints`
|
||||
);
|
||||
return endpointsList.items;
|
||||
try {
|
||||
const { data: endpointsList } = await axios.get<EndpointsList>(
|
||||
`/endpoints/${environmentId}/kubernetes/api/v1/endpoints`
|
||||
);
|
||||
return endpointsList.items;
|
||||
} catch (e) {
|
||||
throw parseKubernetesAxiosError(e, 'Unable to retrieve endpoints');
|
||||
}
|
||||
}
|
||||
|
||||
export function useKubernetesEndpointsQuery(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue