portainer/app/react/kubernetes/helm/HelmApplicationView/queries/useHelmRollbackMutation.ts

62 lines
2.1 KiB
TypeScript

import { useMutation } from '@tanstack/react-query';
import { EnvironmentId } from '@/react/portainer/environments/types';
import {
queryClient,
withInvalidate,
withGlobalError,
} from '@/react-tools/react-query';
import axios from '@/portainer/services/axios';
import { queryKeys } from '@/react/kubernetes/applications/queries/query-keys';
/**
* Parameters for helm rollback operation
*
* @see https://helm.sh/docs/helm/helm_rollback/
*/
interface RollbackQueryParams {
/** Optional namespace for the release (defaults to "default" if not specified) */
namespace?: string;
/** Revision to rollback to (if omitted or set to 0, rolls back to the previous release) */
revision?: number;
/** If set, waits until resources are in a ready state before marking the release as successful (default: false) */
wait?: boolean;
/** If set and --wait enabled, waits until all Jobs have been completed before marking the release as successful (default: false) */
waitForJobs?: boolean;
/** Performs pods restart for the resources if applicable (default: true) */
recreate?: boolean;
/** Force resource update through delete/recreate if needed (default: false) */
force?: boolean;
/** Time to wait for any individual Kubernetes operation in seconds (default: 300) */
timeout?: number;
}
interface RollbackPayload {
releaseName: string;
params: RollbackQueryParams;
}
async function rollbackRelease({
releaseName,
params,
environmentId,
}: RollbackPayload & { environmentId: EnvironmentId }) {
return axios.post<Record<string, unknown>>(
`/endpoints/${environmentId}/kubernetes/helm/${releaseName}/rollback`,
null,
{ params }
);
}
export function useHelmRollbackMutation(environmentId: EnvironmentId) {
return useMutation({
mutationFn: ({ releaseName, params }: RollbackPayload) =>
rollbackRelease({ releaseName, params, environmentId }),
...withGlobalError('Unable to rollback Helm release'),
...withInvalidate(queryClient, [
[environmentId, 'helm', 'releases'],
queryKeys.applications(environmentId),
]),
});
}