diff --git a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFile.ts b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFile.ts index 5f07b9062..c16b0ea9f 100644 --- a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFile.ts +++ b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFile.ts @@ -4,6 +4,7 @@ import axios, { } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -20,6 +21,7 @@ export type StandaloneFileUploadPayload = { /** A UUID to identify a webhook. The stack will be force updated and pull the latest image when the webhook was invoked. */ Webhook?: string; environmentId: EnvironmentId; + Registries?: Array; }; export async function createStandaloneStackFromFile({ diff --git a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFileContent.ts b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFileContent.ts index d53d7e089..4f3331756 100644 --- a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFileContent.ts +++ b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromFileContent.ts @@ -1,6 +1,7 @@ import axios, { parseAxiosError } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -19,6 +20,7 @@ export interface StandaloneFileContentPayload { /** A UUID to identify a webhook. The stack will be force updated and pull the latest image when the webhook was invoked. */ webhook?: string; environmentId: EnvironmentId; + registries?: Array; } export async function createStandaloneStackFromFileContent({ diff --git a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromGit.ts b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromGit.ts index 2106c3e66..10b5622f3 100644 --- a/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromGit.ts +++ b/app/react/common/stacks/queries/useCreateStack/createStandaloneStackFromGit.ts @@ -2,6 +2,7 @@ import axios, { parseAxiosError } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { AutoUpdateResponse } from '@/react/portainer/gitops/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -42,6 +43,7 @@ export type StandaloneGitRepositoryPayload = { /** TLSSkipVerify skips SSL verification when cloning the Git repository */ tlsSkipVerify?: boolean; environmentId: EnvironmentId; + registries?: Array; }; export async function createStandaloneStackFromGit({ diff --git a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFile.ts b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFile.ts index f581615be..4c5fa92c2 100644 --- a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFile.ts +++ b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFile.ts @@ -4,6 +4,7 @@ import axios, { } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -24,6 +25,8 @@ export type SwarmFileUploadPayload = { file: File; environmentId: EnvironmentId; + + Registries?: Array; }; export async function createSwarmStackFromFile({ diff --git a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFileContent.ts b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFileContent.ts index 373df3f1a..fadeeb594 100644 --- a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFileContent.ts +++ b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromFileContent.ts @@ -1,6 +1,7 @@ import axios, { parseAxiosError } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -22,6 +23,7 @@ export interface SwarmFileContentPayload { /** Swarm cluster identifier */ swarmID: string; environmentId: EnvironmentId; + registries?: Array; } export async function createSwarmStackFromFileContent({ diff --git a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromGit.ts b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromGit.ts index cd4fe2dc7..74f559991 100644 --- a/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromGit.ts +++ b/app/react/common/stacks/queries/useCreateStack/createSwarmStackFromGit.ts @@ -2,6 +2,7 @@ import axios, { parseAxiosError } from '@/portainer/services/axios'; import { Pair } from '@/react/portainer/settings/types'; import { AutoUpdateResponse } from '@/react/portainer/gitops/types'; import { EnvironmentId } from '@/react/portainer/environments/types'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { Stack } from '../../types'; @@ -44,6 +45,7 @@ export type SwarmGitRepositoryPayload = { /** TLSSkipVerify skips SSL verification when cloning the Git repository */ tlsSkipVerify?: boolean; environmentId: EnvironmentId; + registries?: Array; }; export async function createSwarmStackFromGit({ diff --git a/app/react/common/stacks/queries/useCreateStack/useCreateStack.ts b/app/react/common/stacks/queries/useCreateStack/useCreateStack.ts index 08ed5560c..92516c45d 100644 --- a/app/react/common/stacks/queries/useCreateStack/useCreateStack.ts +++ b/app/react/common/stacks/queries/useCreateStack/useCreateStack.ts @@ -11,6 +11,7 @@ import { AccessControlFormData } from '@/react/portainer/access-control/types'; import PortainerError from '@/portainer/error'; import { withGlobalError, withInvalidate } from '@/react-tools/react-query'; import { transformAutoUpdateViewModel } from '@/react/portainer/gitops/AutoUpdateFieldset/utils'; +import { RegistryId } from '@/react/portainer/registries/types/registry'; import { queryKeys } from '../query-keys'; @@ -35,6 +36,7 @@ export function useCreateStack() { type BasePayload = { name: string; environmentId: EnvironmentId; + registries?: Array; }; type DockerBasePayload = BasePayload & { @@ -180,6 +182,7 @@ function createSwarmStack({ method, payload }: SwarmCreatePayload) { SwarmID: payload.swarmId, Env: payload.env, Webhook: payload.webhook, + Registries: payload.registries, }); case 'git': return createSwarmStackFromGit({ @@ -200,6 +203,7 @@ function createSwarmStack({ method, payload }: SwarmCreatePayload) { swarmID: payload.swarmId, additionalFiles: payload.git.AdditionalFiles, fromAppTemplate: payload.fromAppTemplate, + registries: payload.registries, }); case 'string': return createSwarmStackFromFileContent({ @@ -210,6 +214,7 @@ function createSwarmStack({ method, payload }: SwarmCreatePayload) { webhook: payload.webhook, swarmID: payload.swarmId, fromAppTemplate: payload.fromAppTemplate, + registries: payload.registries, }); default: throw new Error('Invalid method'); @@ -225,6 +230,7 @@ function createStandaloneStack({ method, payload }: StandaloneCreatePayload) { Name: payload.name, Env: payload.env, Webhook: payload.webhook, + Registries: payload.registries, }); case 'git': return createStandaloneStackFromGit({ @@ -244,6 +250,7 @@ function createStandaloneStack({ method, payload }: StandaloneCreatePayload) { environmentId: payload.environmentId, additionalFiles: payload.git.AdditionalFiles, fromAppTemplate: payload.fromAppTemplate, + registries: payload.registries, }); case 'string': return createStandaloneStackFromFileContent({ @@ -253,6 +260,7 @@ function createStandaloneStack({ method, payload }: StandaloneCreatePayload) { stackFileContent: payload.fileContent, webhook: payload.webhook, fromAppTemplate: payload.fromAppTemplate, + registries: payload.registries, }); default: throw new Error('Invalid method'); diff --git a/app/react/docker/stacks/CreateView/CreateStackForm/CreateStackForm.tsx b/app/react/docker/stacks/CreateView/CreateStackForm/CreateStackForm.tsx index fa8182d73..8d0840584 100644 --- a/app/react/docker/stacks/CreateView/CreateStackForm/CreateStackForm.tsx +++ b/app/react/docker/stacks/CreateView/CreateStackForm/CreateStackForm.tsx @@ -102,6 +102,7 @@ function buildCreateStackPayload( environmentId, env: values.env, accessControl: values.accessControl, + registries: values.registries, }; switch (values.method) {