mirror of
https://github.com/portainer/portainer.git
synced 2025-07-29 10:19:41 +02:00
feat(app): limit the docker API version supported by the frontend (#12295)
Some checks failed
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
ci / build_images (map[arch:arm platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Has been cancelled
/ triage (push) Has been cancelled
Lint / Run linters (push) Has been cancelled
Test / test-client (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:linux]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
Test / test-server (map[arch:arm64 platform:linux]) (push) Has been cancelled
ci / build_manifests (push) Has been cancelled
Some checks failed
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
ci / build_images (map[arch:arm platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Has been cancelled
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Has been cancelled
/ triage (push) Has been cancelled
Lint / Run linters (push) Has been cancelled
Test / test-client (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:linux]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Has been cancelled
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Has been cancelled
Test / test-server (map[arch:arm64 platform:linux]) (push) Has been cancelled
ci / build_manifests (push) Has been cancelled
This commit is contained in:
parent
8cbd23c059
commit
ac5491e864
227 changed files with 4702 additions and 3411 deletions
|
@ -0,0 +1,91 @@
|
|||
import { Network } from 'docker-types/generated/1.41';
|
||||
|
||||
import axios, { parseAxiosError } from '@/portainer/services/axios';
|
||||
import { EnvironmentId } from '@/react/portainer/environments/types';
|
||||
|
||||
import { buildDockerProxyUrl } from '../../proxy/queries/buildDockerProxyUrl';
|
||||
import {
|
||||
withAgentManagerOperationHeader,
|
||||
withAgentTargetHeader,
|
||||
} from '../../proxy/queries/utils';
|
||||
|
||||
type MacvlanConfigOnly = {
|
||||
ConfigOnly: true;
|
||||
Internal: false;
|
||||
Attachable: false;
|
||||
Options: {
|
||||
parent: string; // parent network card
|
||||
};
|
||||
};
|
||||
|
||||
type MacvlanConfigFrom = {
|
||||
ConfigFrom: {
|
||||
Network: string;
|
||||
};
|
||||
Scope: 'swarm' | 'local';
|
||||
};
|
||||
|
||||
type NetworkConfigBase = {
|
||||
Name: Required<Network>['Name'];
|
||||
CheckDuplicate?: boolean;
|
||||
Driver?: string;
|
||||
Internal?: boolean;
|
||||
Attachable?: boolean;
|
||||
Ingress?: boolean;
|
||||
IPAM?: Network['IPAM'];
|
||||
EnableIPv6?: boolean;
|
||||
Options?: Network['Options'];
|
||||
Labels?: Network['Labels'];
|
||||
};
|
||||
|
||||
/**
|
||||
* This type definition of NetworkConfig doesnt enforce the usage of only one type of the union
|
||||
* and not a mix of fields of the unionised types.
|
||||
* e.g. the following is valid for TS while it is not for the Docker API
|
||||
*
|
||||
* const config: NetworkConfig = {
|
||||
* Name: 'my-network', // shared
|
||||
* ConfigOnly: true, // MacvlanConfigOnly
|
||||
* Scope: 'swarm', // MacvlanConfigFrom
|
||||
* }
|
||||
*
|
||||
*/
|
||||
type NetworkConfig =
|
||||
| NetworkConfigBase
|
||||
| (NetworkConfigBase & MacvlanConfigOnly)
|
||||
| (NetworkConfigBase & MacvlanConfigFrom);
|
||||
|
||||
type CreateOptions = {
|
||||
nodeName?: string;
|
||||
agentManagerOperation?: boolean;
|
||||
};
|
||||
|
||||
type CreateNetworkResponse = {
|
||||
Id: string;
|
||||
Warning: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Raw docker API proxy
|
||||
*/
|
||||
export async function createNetwork(
|
||||
environmentId: EnvironmentId,
|
||||
networkConfig: NetworkConfig,
|
||||
{ nodeName, agentManagerOperation }: CreateOptions = {}
|
||||
) {
|
||||
try {
|
||||
const { data } = await axios.post<CreateNetworkResponse>(
|
||||
buildDockerProxyUrl(environmentId, 'networks', 'create'),
|
||||
networkConfig,
|
||||
{
|
||||
headers: {
|
||||
...withAgentTargetHeader(nodeName),
|
||||
...withAgentManagerOperationHeader(agentManagerOperation),
|
||||
},
|
||||
}
|
||||
);
|
||||
return data;
|
||||
} catch (err) {
|
||||
throw parseAxiosError(err, 'Unable to create network');
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue