1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00

feat(app): limit the docker API version supported by the frontend (#11855)
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run

This commit is contained in:
LP B 2024-06-10 20:54:31 +02:00 committed by GitHub
parent 4ba16f1b04
commit 6a8e6734f3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
212 changed files with 4439 additions and 3281 deletions

View file

@ -3,13 +3,13 @@ import { ResourceControlOwnership } from '@/react/portainer/access-control/types
import { UserId } from '@/portainer/users/types';
import { getDefaultImageConfig } from '@/react/portainer/registries/utils/getImageConfig';
import { ContainerResponse } from '../../queries/container';
import { ContainerDetailsResponse } from '../../queries/useContainer';
import { toViewModel as toPortsMappingViewModel } from './PortsMappingField.viewModel';
import { Values } from './BaseForm';
export function toViewModel(
config: ContainerResponse,
config: ContainerDetailsResponse,
isPureAdmin: boolean,
currentUserId: UserId,
nodeName: string,

View file

@ -1,9 +1,9 @@
import { ContainerJSON } from '@/react/docker/containers/queries/container';
import { ContainerDetailsJSON } from '@/react/docker/containers/queries/useContainer';
import { capabilities } from './types';
import { Values } from './CapabilitiesTab';
export function toViewModel(config: ContainerJSON): Values {
export function toViewModel(config: ContainerDetailsJSON): Values {
const { CapAdd, CapDrop } = getDefaults(config);
const missingCaps = capabilities
@ -15,7 +15,7 @@ export function toViewModel(config: ContainerJSON): Values {
return [...CapAdd, ...missingCaps];
function getDefaults(config: ContainerJSON) {
function getDefaults(config: ContainerDetailsJSON) {
return {
CapAdd: config.HostConfig?.CapAdd || [],
CapDrop: config.HostConfig?.CapDrop || [],

View file

@ -2,7 +2,7 @@ import { HostConfig } from 'docker-types/generated/1.41';
import { commandArrayToString } from '@/docker/helpers/containers';
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { ConsoleConfig, ConsoleSetting } from './ConsoleSettings';
import { LogConfig } from './LoggerConfig';
@ -19,7 +19,7 @@ export function getDefaultViewModel(): Values {
};
}
export function toViewModel(config: ContainerJSON): Values {
export function toViewModel(config: ContainerDetailsJSON): Values {
if (!config.Config) {
return getDefaultViewModel();
}

View file

@ -19,7 +19,7 @@ import { InformationPanel } from '@@/InformationPanel';
import { TextTip } from '@@/Tip/TextTip';
import { HelpLink } from '@@/HelpLink';
import { useContainers } from '../queries/containers';
import { useContainers } from '../queries/useContainers';
import { useSystemLimits, useIsWindows } from '../../proxy/queries/useInfo';
import { useCreateOrReplaceMutation } from './useCreateMutation';

View file

@ -1,11 +1,11 @@
import { parseArrayOfStrings } from '@@/form-components/EnvironmentVariablesFieldset/utils';
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
export function getDefaultViewModel() {
return [];
}
export function toViewModel(container: ContainerJSON) {
export function toViewModel(container: ContainerDetailsJSON) {
return parseArrayOfStrings(container.Config?.Env);
}

View file

@ -1,8 +1,8 @@
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { Values } from './types';
export function toViewModel(config: ContainerJSON): Values {
export function toViewModel(config: ContainerDetailsJSON): Values {
if (!config || !config.Config || !config.Config.Labels) {
return [];
}

View file

@ -2,7 +2,7 @@ import { useEnvironmentId } from '@/react/hooks/useEnvironmentId';
import { Option, PortainerSelect } from '@@/form-components/PortainerSelect';
import { useContainers } from '../../queries/containers';
import { useContainers } from '../../queries/useContainers';
import { ContainerStatus } from '../../types';
export function ContainerSelector({

View file

@ -1,7 +1,7 @@
import { DockerNetwork } from '@/react/docker/networks/types';
import { ContainerJSON } from '../../queries/container';
import { DockerContainer } from '../../types';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { ContainerListViewModel } from '../../types';
import { CONTAINER_MODE, Values } from './types';
@ -22,9 +22,9 @@ export function getDefaultViewModel(isWindows: boolean) {
}
export function toViewModel(
config: ContainerJSON,
config: ContainerDetailsJSON,
networks: Array<DockerNetwork>,
runningContainers: Array<DockerContainer> = []
runningContainers: Array<ContainerListViewModel> = []
): Values {
const dns = config.HostConfig?.Dns;
const [primaryDns = '', secondaryDns = ''] = dns || [];
@ -62,9 +62,9 @@ export function toViewModel(
}
function getNetworkMode(
config: ContainerJSON,
config: ContainerDetailsJSON,
networks: Array<DockerNetwork>,
runningContainers: Array<DockerContainer> = []
runningContainers: Array<ContainerListViewModel> = []
) {
let networkMode = config.HostConfig?.NetworkMode || '';
if (!networkMode) {

View file

@ -4,7 +4,7 @@ import { useCurrentStateAndParams } from '@uirouter/react';
import { useState } from 'react';
import { FormikHelpers } from 'formik/dist/types';
import { invalidateContainer } from '@/react/docker/containers/queries/container';
import { invalidateContainer } from '@/react/docker/containers/queries/useContainer';
import { notifySuccess } from '@/portainer/services/notifications';
import { mutationOptions, withError } from '@/react-tools/react-query';
import { useSystemLimits } from '@/react/docker/proxy/queries/useInfo';

View file

@ -1,11 +1,11 @@
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { toDevicesViewModel } from './DevicesField';
import { gpuFieldsetUtils } from './GpuFieldset';
import { toViewModelCpu, toViewModelMemory } from './memory-utils';
import { Values } from './ResourcesTab';
export function toViewModel(config: ContainerJSON): Values {
export function toViewModel(config: ContainerDetailsJSON): Values {
return {
runtime: {
privileged: config.HostConfig?.Privileged || false,

View file

@ -1,8 +1,8 @@
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { RestartPolicy } from './types';
export function toViewModel(config: ContainerJSON): RestartPolicy {
export function toViewModel(config: ContainerDetailsJSON): RestartPolicy {
switch (config.HostConfig?.RestartPolicy?.Name) {
case 'always':
return RestartPolicy.Always;

View file

@ -1,8 +1,8 @@
import { ContainerJSON } from '../../queries/container';
import { ContainerDetailsJSON } from '../../queries/useContainer';
import { VolumeType, Values } from './types';
export function toViewModel(config: ContainerJSON): Values {
export function toViewModel(config: ContainerDetailsJSON): Values {
return Object.values(config.Mounts || {}).map((mount) => ({
type: (mount.Type || 'volume') as VolumeType,
name: mount.Name || mount.Source || '',

View file

@ -31,13 +31,13 @@ import {
renameContainer,
startContainer,
stopContainer,
urlBuilder,
} from '../containers.service';
import { PortainerResponse } from '../../types';
import { connectContainer } from '../../networks/queries/useConnectContainer';
import { DockerContainer } from '../types';
import { connectContainer } from '../../networks/queries/useConnectContainerMutation';
import { ContainerListViewModel } from '../types';
import { queryKeys } from '../queries/query-keys';
import { addNodeHeader } from '../../proxy/addNodeHeader';
import { withAgentTargetHeader } from '../../proxy/queries/utils';
import { buildDockerProxyUrl } from '../../proxy/queries/buildDockerProxyUrl';
import { CreateContainerRequest } from './types';
import { Values } from './useInitialValues';
@ -75,7 +75,7 @@ interface CreateOptions {
}
interface ReplaceOptions extends CreateOptions {
oldContainer: DockerContainer;
oldContainer: ContainerListViewModel;
extraNetworks: Array<ExtraNetwork>;
}
@ -172,7 +172,7 @@ async function replace({
async function renameAndCreate(
environmentId: EnvironmentId,
name: string,
oldContainer: DockerContainer,
oldContainer: ContainerListViewModel,
config: CreateContainerRequest,
nodeName?: string
) {
@ -234,7 +234,7 @@ async function applyContainerSettings(
async function createAndStart(
environmentId: EnvironmentId,
config: CreateContainerRequest,
name: string,
name?: string,
nodeName?: string
) {
let containerId = '';
@ -290,12 +290,10 @@ async function createContainer(
{ nodeName }: { nodeName?: string } = {}
) {
try {
const headers = addNodeHeader(nodeName);
const { data } = await axios.post<
PortainerResponse<{ Id: string; Warnings: Array<string> }>
>(urlBuilder(environmentId, undefined, 'create'), config, {
headers,
>(buildDockerProxyUrl(environmentId, 'containers', 'create'), config, {
headers: { ...withAgentTargetHeader(nodeName) },
params: { name },
});
@ -349,7 +347,7 @@ function connectToExtraNetworks(
function stopContainerIfNeeded(
environmentId: EnvironmentId,
container: DockerContainer,
container: ContainerListViewModel,
nodeName?: string
) {
if (container.State !== 'running' || !container.Id) {

View file

@ -43,8 +43,8 @@ import { useEnvironmentRegistries } from '@/react/portainer/environments/queries
import { EnvVarValues } from '@@/form-components/EnvironmentVariablesFieldset';
import { useNetworksForSelector } from '../components/NetworkSelector';
import { useContainers } from '../queries/containers';
import { useContainer } from '../queries/container';
import { useContainers } from '../queries/useContainers';
import { useContainer } from '../queries/useContainer';
export interface Values extends BaseFormValues {
commands: CommandsTabValues;