1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00
portainer/app/react/docker/services/ItemView/PortMappingField/toRequest.ts
Chaim Lev-Ari d336a14e50
Some checks failed
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
ci / build_images (map[arch:s390x platform:linux version:]) (push) Has been cancelled
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
/ 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
feat(docker/services): show port ranges [EE-4012] (#10657)
2024-03-27 09:56:00 +02:00

62 lines
1.8 KiB
TypeScript

import { EndpointPortConfig } from 'docker-types/generated/1.41';
import _ from 'lodash';
import { Values } from './PortsMappingField';
import { isRange } from './types';
export function toRequest(portBindings: Values): Array<EndpointPortConfig> {
return _.compact(
portBindings.flatMap((portBinding) => {
const { hostPort, protocol, containerPort, publishMode } = portBinding;
if (!hostPort && !containerPort) {
return null;
}
if (isRange(hostPort) && isRange(containerPort)) {
if (
hostPort.end - hostPort.start !==
containerPort.end - containerPort.start
) {
throw new Error(
`Invalid port specification: host port range must be equal to container port range`
);
}
return Array.from(
{ length: hostPort.end - hostPort.start + 1 },
(_, i) => ({
PublishedPort: hostPort.start + i,
Protocol: protocol,
TargetPort: containerPort.start + i,
PublishMode: publishMode,
})
);
}
if (isRange(hostPort) && !isRange(containerPort)) {
return Array.from(
{ length: hostPort.end - hostPort.start + 1 },
(_, i) => ({
PublishedPort: hostPort.start + i,
Protocol: protocol,
TargetPort: containerPort,
PublishMode: publishMode,
})
);
}
if (!isRange(hostPort) && !isRange(containerPort)) {
return {
PublishedPort: hostPort,
Protocol: protocol,
TargetPort: containerPort,
PublishMode: publishMode,
};
}
throw new Error(
`Invalid port specification: host port must be a range when container port is a range`
);
})
);
}