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

feat(docker/containers): migrate network tab to react [EE-5210] (#10344)

This commit is contained in:
Chaim Lev-Ari 2023-09-21 14:02:02 +03:00 committed by GitHub
parent e92f067e42
commit 2b47b84e5e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 413 additions and 246 deletions

View file

@ -0,0 +1,102 @@
import { DockerNetwork } from '@/react/docker/networks/types';
import { ContainerJSON } from '../../queries/container';
import { DockerContainer } from '../../types';
import { CONTAINER_MODE, Values } from './types';
export function getDefaultViewModel(hasBridgeNetwork: boolean) {
return {
networkMode: hasBridgeNetwork ? 'bridge' : 'nat',
hostname: '',
domain: '',
macAddress: '',
ipv4Address: '',
ipv6Address: '',
primaryDns: '',
secondaryDns: '',
hostsFileEntries: [],
container: '',
};
}
export function toViewModel(
config: ContainerJSON,
networks: Array<DockerNetwork>,
runningContainers: Array<DockerContainer> = []
): Values {
const dns = config.HostConfig?.Dns;
const [primaryDns = '', secondaryDns = ''] = dns || [];
const hostsFileEntries = config.HostConfig?.ExtraHosts || [];
const [networkMode, container = ''] = getNetworkMode(
config,
networks,
runningContainers
);
const networkSettings = config.NetworkSettings?.Networks?.[networkMode];
let ipv4Address = '';
let ipv6Address = '';
if (networkSettings && networkSettings.IPAMConfig) {
ipv4Address = networkSettings.IPAMConfig.IPv4Address || '';
ipv6Address = networkSettings.IPAMConfig.IPv6Address || '';
}
const macAddress = networkSettings?.MacAddress || '';
return {
networkMode,
hostname: config.Config?.Hostname || '',
domain: config.Config?.Domainname || '',
macAddress,
ipv4Address,
ipv6Address,
primaryDns,
secondaryDns,
hostsFileEntries,
container,
};
}
function getNetworkMode(
config: ContainerJSON,
networks: Array<DockerNetwork>,
runningContainers: Array<DockerContainer> = []
) {
let networkMode = config.HostConfig?.NetworkMode || '';
if (!networkMode) {
const networks = Object.keys(config.NetworkSettings?.Networks || {});
if (networks.length > 0) {
[networkMode] = networks;
}
}
if (networkMode.startsWith('container:')) {
const networkContainerId = networkMode.split(/^container:/)[1];
const container =
runningContainers.find((c) => c.Id === networkContainerId)?.Names[0] ||
'';
return [CONTAINER_MODE, container] as const;
}
const networkNames = networks.map((n) => n.Name);
if (networkNames.includes(networkMode)) {
return [networkMode] as const;
}
if (
networkNames.includes('bridge') &&
(!networkMode || networkMode === 'default' || networkMode === 'bridge')
) {
return ['bridge'] as const;
}
if (networkNames.includes('nat')) {
return ['nat'] as const;
}
return [networks[0].Name] as const;
}