mirror of https://github.com/portainer/portainer
70 lines
1.9 KiB
TypeScript
70 lines
1.9 KiB
TypeScript
import { commandStringToArray } from '@/docker/helpers/containers';
|
|
|
|
import { CreateContainerRequest } from '../types';
|
|
|
|
import { Values } from './types';
|
|
import { LogConfig } from './LoggerConfig';
|
|
import { ConsoleConfig, ConsoleSetting } from './ConsoleSettings';
|
|
|
|
export function toRequest(
|
|
oldConfig: CreateContainerRequest,
|
|
values: Values
|
|
): CreateContainerRequest {
|
|
const config = {
|
|
...oldConfig,
|
|
|
|
HostConfig: {
|
|
...oldConfig.HostConfig,
|
|
LogConfig: getLogConfig(values.logConfig),
|
|
},
|
|
User: values.user,
|
|
WorkingDir: values.workingDir,
|
|
...getConsoleConfig(values.console),
|
|
} satisfies CreateContainerRequest;
|
|
|
|
if (values.cmd) {
|
|
config.Cmd = commandStringToArray(values.cmd);
|
|
} else if (values.cmd === null) {
|
|
delete config.Cmd;
|
|
}
|
|
|
|
if (values.entrypoint) {
|
|
config.Entrypoint = commandStringToArray(values.entrypoint);
|
|
} else if (values.entrypoint === null) {
|
|
delete config.Entrypoint;
|
|
}
|
|
|
|
// don't include LogConfig object if "Default logging driver" (type === '') is selected
|
|
if (values.logConfig.type === '') {
|
|
delete config.HostConfig.LogConfig;
|
|
}
|
|
|
|
return config;
|
|
|
|
function getConsoleConfig(value: ConsoleSetting): ConsoleConfig {
|
|
switch (value) {
|
|
case 'both':
|
|
return { OpenStdin: true, Tty: true };
|
|
case 'interactive':
|
|
return { OpenStdin: true, Tty: false };
|
|
case 'tty':
|
|
return { OpenStdin: false, Tty: true };
|
|
case 'none':
|
|
default:
|
|
return { OpenStdin: false, Tty: false };
|
|
}
|
|
}
|
|
|
|
function getLogConfig(
|
|
value: LogConfig
|
|
): CreateContainerRequest['HostConfig']['LogConfig'] {
|
|
return {
|
|
Type: value.type,
|
|
Config: Object.fromEntries(
|
|
value.options.map(({ option, value }) => [option, value])
|
|
),
|
|
// docker types - requires union while it should allow also custom string for custom plugins
|
|
} as CreateContainerRequest['HostConfig']['LogConfig'];
|
|
}
|
|
}
|